| Method from org.apache.naming.resources.WARDirContext Detail: |
public void bind(String name,
Object obj,
Attributes attrs) throws NamingException {
throw new OperationNotSupportedException();
}
Binds a name to an object, along with associated attributes. If attrs
is null, the resulting binding will have the attributes associated
with obj if obj is a DirContext, and no attributes otherwise. If attrs
is non-null, the resulting binding will have attrs as its attributes;
any attributes associated with obj are ignored. |
public DirContext createSubcontext(String name,
Attributes attrs) throws NamingException {
throw new OperationNotSupportedException();
}
Creates and binds a new context, along with associated attributes.
This method creates a new subcontext with the given name, binds it in
the target context (that named by all but terminal atomic component of
the name), and associates the supplied attributes with the newly
created object. All intermediate and target contexts must already
exist. If attrs is null, this method is equivalent to
Context.createSubcontext(). |
public void destroySubcontext(String name) throws NamingException {
throw new OperationNotSupportedException();
}
Destroys the named context and removes it from the namespace. Any
attributes associated with the name are also removed. Intermediate
contexts are not destroyed.
This method is idempotent. It succeeds even if the terminal atomic
name is not bound in the target context, but throws
NameNotFoundException if any of the intermediate contexts do not exist.
In a federated naming system, a context from one naming system may be
bound to a name in another. One can subsequently look up and perform
operations on the foreign context using a composite name. However, an
attempt destroy the context using this composite name will fail with
NotContextException, because the foreign context is not a "subcontext"
of the context in which it is bound. Instead, use unbind() to remove
the binding of the foreign context. Destroying the foreign context
requires that the destroySubcontext() be performed on a context from
the foreign context's "native" naming system. |
public Attributes getAttributes(String name,
String[] attrIds) throws NamingException {
return getAttributes(new CompositeName(name), attrIds);
}
Retrieves selected attributes associated with a named object.
See the class description regarding attribute models, attribute type
names, and operational attributes. |
public Attributes getAttributes(Name name,
String[] attrIds) throws NamingException {
Entry entry = null;
if (name.isEmpty())
entry = entries;
else
entry = treeLookup(name);
if (entry == null)
throw new NamingException
(sm.getString("resources.notFound", name));
ZipEntry zipEntry = entry.getEntry();
ResourceAttributes attrs = new ResourceAttributes();
attrs.setCreationDate(new Date(zipEntry.getTime()));
attrs.setName(entry.getName());
if (!zipEntry.isDirectory())
attrs.setResourceType("");
attrs.setContentLength(zipEntry.getSize());
attrs.setLastModified(zipEntry.getTime());
return attrs;
}
Retrieves all of the attributes associated with a named object. |
public String getNameInNamespace() throws NamingException {
return docBase;
}
Retrieves the full name of this context within its own namespace.
Many naming services have a notion of a "full name" for objects in
their respective namespaces. For example, an LDAP entry has a
distinguished name, and a DNS record has a fully qualified name. This
method allows the client application to retrieve this name. The string
returned by this method is not a JNDI composite name and should not be
passed directly to context methods. In naming systems for which the
notion of full name does not make sense,
OperationNotSupportedException is thrown. |
public DirContext getSchema(String name) throws NamingException {
throw new OperationNotSupportedException();
}
Retrieves the schema associated with the named object. The schema
describes rules regarding the structure of the namespace and the
attributes stored within it. The schema specifies what types of
objects can be added to the directory and where they can be added;
what mandatory and optional attributes an object can have. The range
of support for schemas is directory-specific. |
public DirContext getSchemaClassDefinition(String name) throws NamingException {
throw new OperationNotSupportedException();
}
Retrieves a context containing the schema objects of the named
object's class definitions. |
public NamingEnumeration list(String name) throws NamingException {
return list(new CompositeName(name));
}
Enumerates the names bound in the named context, along with the class
names of objects bound to them. The contents of any subcontexts are
not included.
If a binding is added to or removed from this context, its effect on
an enumeration previously returned is undefined. |
public NamingEnumeration list(Name name) throws NamingException {
if (name.isEmpty())
return new NamingContextEnumeration(list(entries).iterator());
Entry entry = treeLookup(name);
if (entry == null)
throw new NamingException
(sm.getString("resources.notFound", name));
return new NamingContextEnumeration(list(entry).iterator());
}
Enumerates the names bound in the named context, along with the class
names of objects bound to them. The contents of any subcontexts are
not included.
If a binding is added to or removed from this context, its effect on
an enumeration previously returned is undefined. |
protected ArrayList list(WARDirContext.Entry entry) {
ArrayList entries = new ArrayList();
Entry[] children = entry.getChildren();
Arrays.sort(children);
NamingEntry namingEntry = null;
for (int i = 0; i < children.length; i++) {
ZipEntry current = children[i].getEntry();
Object object = null;
if (current.isDirectory()) {
object = new WARDirContext(base, children[i]);
} else {
object = new WARResource(current);
}
namingEntry = new NamingEntry
(children[i].getName(), object, NamingEntry.ENTRY);
entries.add(namingEntry);
}
return entries;
}
List children as objects. |
public NamingEnumeration listBindings(String name) throws NamingException {
return listBindings(new CompositeName(name));
}
Enumerates the names bound in the named context, along with the
objects bound to them. The contents of any subcontexts are not
included.
If a binding is added to or removed from this context, its effect on
an enumeration previously returned is undefined. |
public NamingEnumeration listBindings(Name name) throws NamingException {
if (name.isEmpty())
return new NamingContextBindingsEnumeration(list(entries).iterator(),
this);
Entry entry = treeLookup(name);
if (entry == null)
throw new NamingException
(sm.getString("resources.notFound", name));
return new NamingContextBindingsEnumeration(list(entry).iterator(),
this);
}
Enumerates the names bound in the named context, along with the
objects bound to them. The contents of any subcontexts are not
included.
If a binding is added to or removed from this context, its effect on
an enumeration previously returned is undefined. |
protected void loadEntries() {
try {
Enumeration entryList = base.entries();
entries = new Entry("/", new ZipEntry("/"));
while (entryList.hasMoreElements()) {
ZipEntry entry = (ZipEntry) entryList.nextElement();
String name = normalize(entry);
int pos = name.lastIndexOf('/");
// Check that parent entries exist and, if not, create them.
// This fixes a bug for war files that don't record separate
// zip entries for the directories.
int currentPos = -1;
int lastPos = 0;
while ((currentPos = name.indexOf('/", lastPos)) != -1) {
Name parentName = new CompositeName(name.substring(0, lastPos));
Name childName = new CompositeName(name.substring(0, currentPos));
String entryName = name.substring(lastPos, currentPos);
// Parent should have been created in last cycle through
// this loop
Entry parent = treeLookup(parentName);
Entry child = treeLookup(childName);
if (child == null) {
// Create a new entry for missing entry and strip off
// the leading '/' character and appended on by the
// normalize method and add '/' character to end to
// signify that it is a directory entry
String zipName = name.substring(1, currentPos) + "/";
child = new Entry(entryName, new ZipEntry(zipName));
if (parent != null)
parent.addChild(child);
}
// Increment lastPos
lastPos = currentPos + 1;
}
String entryName = name.substring(pos + 1, name.length());
Name compositeName = new CompositeName(name.substring(0, pos));
Entry parent = treeLookup(compositeName);
Entry child = new Entry(entryName, entry);
if (parent != null)
parent.addChild(child);
}
} catch (Exception e) {
}
}
Constructs a tree of the entries contained in a WAR file. |
public Object lookup(String name) throws NamingException {
return lookup(new CompositeName(name));
}
Retrieves the named object. |
public Object lookup(Name name) throws NamingException {
if (name.isEmpty())
return this;
Entry entry = treeLookup(name);
if (entry == null)
throw new NamingException
(sm.getString("resources.notFound", name));
ZipEntry zipEntry = entry.getEntry();
if (zipEntry.isDirectory())
return new WARDirContext(base, entry);
else
return new WARResource(entry.getEntry());
}
Retrieves the named object. If name is empty, returns a new instance
of this context (which represents the same naming context as this
context, but its environment may be modified independently and it may
be accessed concurrently). |
public Object lookupLink(String name) throws NamingException {
// Note : Links are not supported
return lookup(name);
}
Retrieves the named object, following links except for the terminal
atomic component of the name. If the object bound to name is not a
link, returns the object itself. |
public void modifyAttributes(String name,
ModificationItem[] mods) throws NamingException {
throw new OperationNotSupportedException();
}
Modifies the attributes associated with a named object using an an
ordered list of modifications. The modifications are performed in the
order specified. Each modification specifies a modification operation
code and an attribute on which to operate. Where possible, the
modifications are performed atomically. |
public void modifyAttributes(String name,
int mod_op,
Attributes attrs) throws NamingException {
throw new OperationNotSupportedException();
}
Modifies the attributes associated with a named object. The order of
the modifications is not specified. Where possible, the modifications
are performed atomically. |
protected String normalize(ZipEntry entry) {
String result = "/" + entry.getName();
if (entry.isDirectory()) {
result = result.substring(0, result.length() - 1);
}
return result;
}
Normalize the name of an entry read from the Zip. |
public void rebind(String name,
Object obj,
Attributes attrs) throws NamingException {
throw new OperationNotSupportedException();
}
Binds a name to an object, along with associated attributes,
overwriting any existing binding. If attrs is null and obj is a
DirContext, the attributes from obj are used. If attrs is null and obj
is not a DirContext, any existing attributes associated with the object
already bound in the directory remain unchanged. If attrs is non-null,
any existing attributes associated with the object already bound in
the directory are removed and attrs is associated with the named
object. If obj is a DirContext and attrs is non-null, the attributes
of obj are ignored. |
public void release() {
entries = null;
if (base != null) {
try {
base.close();
} catch (IOException e) {
log.warn
("Exception closing WAR File " + base.getName(), e);
}
}
base = null;
super.release();
}
Release any resources allocated for this directory context. |
public void rename(String oldName,
String newName) throws NamingException {
throw new OperationNotSupportedException();
}
Binds a new name to the object bound to an old name, and unbinds the
old name. Both names are relative to this context. Any attributes
associated with the old name become associated with the new name.
Intermediate contexts of the old name are not changed. |
public NamingEnumeration search(String name,
Attributes matchingAttributes) throws NamingException {
throw new OperationNotSupportedException();
}
Searches in a single context for objects that contain a specified set
of attributes. This method returns all the attributes of such objects.
It is equivalent to supplying null as the atributesToReturn parameter
to the method search(Name, Attributes, String[]). |
public NamingEnumeration search(String name,
Attributes matchingAttributes,
String[] attributesToReturn) throws NamingException {
throw new OperationNotSupportedException();
}
Searches in a single context for objects that contain a specified set
of attributes, and retrieves selected attributes. The search is
performed using the default SearchControls settings. |
public NamingEnumeration search(String name,
String filter,
SearchControls cons) throws NamingException {
throw new OperationNotSupportedException();
}
Searches in the named context or object for entries that satisfy the
given search filter. Performs the search as specified by the search
controls. |
public NamingEnumeration search(String name,
String filterExpr,
Object[] filterArgs,
SearchControls cons) throws NamingException {
throw new OperationNotSupportedException();
}
Searches in the named context or object for entries that satisfy the
given search filter. Performs the search as specified by the search
controls. |
public void setDocBase(String docBase) {
// ------------------------------------------------------------- Properties
// Validate the format of the proposed document root
if (docBase == null)
throw new IllegalArgumentException
(sm.getString("resources.null"));
if (!(docBase.endsWith(".war")))
throw new IllegalArgumentException
(sm.getString("warResources.notWar"));
// Calculate a File object referencing this document base directory
File base = new File(docBase);
// Validate that the document base is an existing directory
if (!base.exists() || !base.canRead() || base.isDirectory())
throw new IllegalArgumentException
(sm.getString("warResources.invalidWar", docBase));
try {
this.base = new ZipFile(base);
} catch (Exception e) {
throw new IllegalArgumentException
(sm.getString("warResources.invalidWar", e.getMessage()));
}
super.setDocBase(docBase);
loadEntries();
}
|
protected WARDirContext.Entry treeLookup(Name name) {
if (name.isEmpty())
return entries;
Entry currentEntry = entries;
for (int i = 0; i < name.size(); i++) {
if (name.get(i).length() == 0)
continue;
currentEntry = currentEntry.getChild(name.get(i));
if (currentEntry == null)
return null;
}
return currentEntry;
}
|
public void unbind(String name) throws NamingException {
throw new OperationNotSupportedException();
}
Unbinds the named object. Removes the terminal atomic name in name
from the target context--that named by all but the terminal atomic
part of name.
This method is idempotent. It succeeds even if the terminal atomic
name is not bound in the target context, but throws
NameNotFoundException if any of the intermediate contexts do not exist. |