* Add SimpleFileRepository for adding single global JavaScript files as repositories.
This commit is contained in:
parent
65a11b1b08
commit
e431e18d45
1 changed files with 337 additions and 0 deletions
337
src/helma/framework/repository/SingleFileRepository.java
Normal file
337
src/helma/framework/repository/SingleFileRepository.java
Normal file
|
@ -0,0 +1,337 @@
|
|||
/*
|
||||
* Helma License Notice
|
||||
*
|
||||
* The contents of this file are subject to the Helma License
|
||||
* Version 2.0 (the "License"). You may not use this file except in
|
||||
* compliance with the License. A copy of the License is available at
|
||||
* http://adele.helma.org/download/helma/license.txt
|
||||
*
|
||||
* Copyright 1998-2006 Helma Software. All Rights Reserved.
|
||||
*
|
||||
* $RCSfile$
|
||||
* $Author$
|
||||
* $Revision$
|
||||
* $Date$
|
||||
*/
|
||||
|
||||
package helma.framework.repository;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
|
||||
public class SingleFileRepository implements Repository {
|
||||
|
||||
final Resource res;
|
||||
final Repository global;
|
||||
final Repository[] repositories;
|
||||
|
||||
/**
|
||||
* Constructs a SingleFileRepository using the given argument
|
||||
* @param initArgs absolute path to the script file
|
||||
*/
|
||||
public SingleFileRepository(String initArgs) {
|
||||
this(new File(initArgs));
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a SingleFileRepository using the given argument
|
||||
* @param file the script file
|
||||
*/
|
||||
public SingleFileRepository(File file) {
|
||||
res = new FileResource(file, this);
|
||||
global = new FakeGlobal();
|
||||
repositories = new Repository[] { global };
|
||||
}
|
||||
|
||||
/**
|
||||
* Checksum of the repository and all its content. Implementations
|
||||
* should make sure
|
||||
*
|
||||
* @return checksum
|
||||
* @throws java.io.IOException
|
||||
*/
|
||||
public long getChecksum() throws IOException {
|
||||
return res.lastModified();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name of the repository.
|
||||
*
|
||||
* @return name of the repository
|
||||
*/
|
||||
public String getShortName() {
|
||||
return res.getShortName();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name of the repository; this is a full name including all
|
||||
* parent repositories.
|
||||
*
|
||||
* @return full name of the repository
|
||||
*/
|
||||
public String getName() {
|
||||
return res.getName();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get this repository's logical script root repository.
|
||||
*
|
||||
* @return top-level repository
|
||||
* @see {isScriptRoot()}
|
||||
*/
|
||||
public Repository getRootRepository() {
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns this repository's parent repository.
|
||||
* Returns null if this repository already is the top-level repository
|
||||
*
|
||||
* @return the parent repository
|
||||
*/
|
||||
public Repository getParentRepository() {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks wether the repository is to be considered a top-level
|
||||
* repository from a scripting point of view. For example, a zip
|
||||
* file within a file repository is not a root repository from
|
||||
* a physical point of view, but from the scripting point of view it is.
|
||||
*
|
||||
* @return true if the repository is to be considered a top-level script repository
|
||||
*/
|
||||
public boolean isScriptRoot() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the repository if does not exist yet
|
||||
*
|
||||
* @throws java.io.IOException
|
||||
*/
|
||||
public void create() throws IOException {
|
||||
// noop
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks wether the repository actually (or still) exists
|
||||
*
|
||||
* @return true if the repository exists
|
||||
* @throws java.io.IOException
|
||||
*/
|
||||
public boolean exists() throws IOException {
|
||||
return res.exists();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns this repository's direct child repositories
|
||||
*
|
||||
* @return direct repositories
|
||||
* @throws java.io.IOException
|
||||
*/
|
||||
public Repository[] getRepositories() throws IOException {
|
||||
return repositories;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all direct and indirect resources
|
||||
*
|
||||
* @return resources recursive
|
||||
* @throws java.io.IOException
|
||||
*/
|
||||
public List getAllResources() throws IOException {
|
||||
return global.getAllResources();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all direct resources
|
||||
*
|
||||
* @return direct resources
|
||||
* @throws java.io.IOException
|
||||
*/
|
||||
public Iterator getResources() throws IOException {
|
||||
return new Iterator() {
|
||||
public boolean hasNext() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public void remove() {}
|
||||
|
||||
public Object next() {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a specific direct resource of the repository
|
||||
*
|
||||
* @param resourceName name of the child resource to return
|
||||
* @return specified child resource
|
||||
*/
|
||||
public Resource getResource(String resourceName) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the date the repository was last modified.
|
||||
*
|
||||
* @return last modified date
|
||||
* @throws java.io.IOException
|
||||
*/
|
||||
public long lastModified() throws IOException {
|
||||
return res.lastModified();
|
||||
}
|
||||
|
||||
class FakeGlobal implements Repository {
|
||||
|
||||
final List resources;
|
||||
|
||||
FakeGlobal() {
|
||||
resources = new LinkedList();
|
||||
resources.add(res);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checksum of the repository and all its content. Implementations
|
||||
* should make sure
|
||||
*
|
||||
* @return checksum
|
||||
* @throws java.io.IOException
|
||||
*/
|
||||
public long getChecksum() throws IOException {
|
||||
return res.lastModified();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name of the repository.
|
||||
*
|
||||
* @return name of the repository
|
||||
*/
|
||||
public String getShortName() {
|
||||
// we need to return "Global" here in order to be recognized as
|
||||
// global code folder - that's the whole purpose of this class
|
||||
return "Global";
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name of the repository; this is a full name including all
|
||||
* parent repositories.
|
||||
*
|
||||
* @return full name of the repository
|
||||
*/
|
||||
public String getName() {
|
||||
return res.getName();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get this repository's logical script root repository.
|
||||
*
|
||||
* @return top-level repository
|
||||
* @see {isScriptRoot()}
|
||||
*/
|
||||
public Repository getRootRepository() {
|
||||
return SingleFileRepository.this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns this repository's parent repository.
|
||||
* Returns null if this repository already is the top-level repository
|
||||
*
|
||||
* @return the parent repository
|
||||
*/
|
||||
public Repository getParentRepository() {
|
||||
return SingleFileRepository.this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks wether the repository is to be considered a top-level
|
||||
* repository from a scripting point of view. For example, a zip
|
||||
* file within a file repository is not a root repository from
|
||||
* a physical point of view, but from the scripting point of view it is.
|
||||
*
|
||||
* @return true if the repository is to be considered a top-level script repository
|
||||
*/
|
||||
public boolean isScriptRoot() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the repository if does not exist yet
|
||||
*
|
||||
* @throws java.io.IOException
|
||||
*/
|
||||
public void create() throws IOException {
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks wether the repository actually (or still) exists
|
||||
*
|
||||
* @return true if the repository exists
|
||||
* @throws java.io.IOException
|
||||
*/
|
||||
public boolean exists() throws IOException {
|
||||
return res.exists();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns this repository's direct child repositories
|
||||
*
|
||||
* @return direct repositories
|
||||
* @throws java.io.IOException
|
||||
*/
|
||||
public Repository[] getRepositories() throws IOException {
|
||||
return AbstractRepository.emptyRepositories;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all direct and indirect resources
|
||||
*
|
||||
* @return resources recursive
|
||||
* @throws java.io.IOException
|
||||
*/
|
||||
public List getAllResources() throws IOException {
|
||||
return resources;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all direct resources
|
||||
*
|
||||
* @return direct resources
|
||||
* @throws java.io.IOException
|
||||
*/
|
||||
public Iterator getResources() throws IOException {
|
||||
return resources.iterator();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a specific direct resource of the repository
|
||||
*
|
||||
* @param resourceName name of the child resource to return
|
||||
* @return specified child resource
|
||||
*/
|
||||
public Resource getResource(String resourceName) {
|
||||
if (res.getName().equals(resourceName)) {
|
||||
return res;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the date the repository was last modified.
|
||||
*
|
||||
* @return last modified date
|
||||
* @throws java.io.IOException
|
||||
*/
|
||||
public long lastModified() throws IOException {
|
||||
return res.lastModified();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
Loading…
Add table
Reference in a new issue