Should fix bug 434 <http://helma.org/bugs/show_bug.cgi?id=434>
* Synchronize all methods that call/rely on update(). * Make sure repositories and resources are not null after update() has been called.
This commit is contained in:
parent
bea4c3a5b7
commit
37e51812d6
3 changed files with 12 additions and 7 deletions
|
@ -97,7 +97,7 @@ public abstract class AbstractRepository implements Repository {
|
||||||
* If the name can't be resolved to a resource, a resource object is returned
|
* If the name can't be resolved to a resource, a resource object is returned
|
||||||
* for which {@link Resource exists()} returns <code>false<code>.
|
* for which {@link Resource exists()} returns <code>false<code>.
|
||||||
*/
|
*/
|
||||||
public Resource getResource(String name) {
|
public synchronized Resource getResource(String name) {
|
||||||
update();
|
update();
|
||||||
|
|
||||||
Resource res = (Resource) resources.get(name);
|
Resource res = (Resource) resources.get(name);
|
||||||
|
@ -112,7 +112,7 @@ public abstract class AbstractRepository implements Repository {
|
||||||
/**
|
/**
|
||||||
* Get an iterator over the resources contained in this repository.
|
* Get an iterator over the resources contained in this repository.
|
||||||
*/
|
*/
|
||||||
public Iterator getResources() {
|
public synchronized Iterator getResources() {
|
||||||
update();
|
update();
|
||||||
|
|
||||||
return resources.values().iterator();
|
return resources.values().iterator();
|
||||||
|
@ -121,7 +121,7 @@ public abstract class AbstractRepository implements Repository {
|
||||||
/**
|
/**
|
||||||
* Get an iterator over the sub-repositories contained in this repository.
|
* Get an iterator over the sub-repositories contained in this repository.
|
||||||
*/
|
*/
|
||||||
public Repository[] getRepositories() {
|
public synchronized Repository[] getRepositories() {
|
||||||
update();
|
update();
|
||||||
|
|
||||||
return repositories;
|
return repositories;
|
||||||
|
@ -138,7 +138,7 @@ public abstract class AbstractRepository implements Repository {
|
||||||
* Get a deep list of this repository's resources, including all resources
|
* Get a deep list of this repository's resources, including all resources
|
||||||
* contained in sub-reposotories.
|
* contained in sub-reposotories.
|
||||||
*/
|
*/
|
||||||
public List getAllResources() throws IOException {
|
public synchronized List getAllResources() throws IOException {
|
||||||
update();
|
update();
|
||||||
|
|
||||||
ArrayList allResources = new ArrayList();
|
ArrayList allResources = new ArrayList();
|
||||||
|
|
|
@ -115,7 +115,7 @@ public class FileRepository extends AbstractRepository {
|
||||||
return directory.lastModified();
|
return directory.lastModified();
|
||||||
}
|
}
|
||||||
|
|
||||||
public long getChecksum() throws IOException {
|
public synchronized long getChecksum() throws IOException {
|
||||||
// delay checksum check if already checked recently
|
// delay checksum check if already checked recently
|
||||||
if (System.currentTimeMillis() > lastChecksumTime + cacheTime) {
|
if (System.currentTimeMillis() > lastChecksumTime + cacheTime) {
|
||||||
|
|
||||||
|
@ -141,8 +141,11 @@ public class FileRepository extends AbstractRepository {
|
||||||
public synchronized void update() {
|
public synchronized void update() {
|
||||||
if (!directory.exists()) {
|
if (!directory.exists()) {
|
||||||
repositories = new Repository[0];
|
repositories = new Repository[0];
|
||||||
if (resources != null)
|
if (resources != null) {
|
||||||
|
resources = new HashMap();
|
||||||
|
} else {
|
||||||
resources.clear();
|
resources.clear();
|
||||||
|
}
|
||||||
lastModified = 0;
|
lastModified = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,7 +95,9 @@ public final class ZipRepository extends AbstractRepository {
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void update() {
|
public synchronized void update() {
|
||||||
if (file.lastModified() != lastModified) {
|
if (file.lastModified() != lastModified ||
|
||||||
|
repositories == null ||
|
||||||
|
resources == null) {
|
||||||
lastModified = file.lastModified();
|
lastModified = file.lastModified();
|
||||||
ZipFile zipfile = null;
|
ZipFile zipfile = null;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue