📄 wardircontext.java
字号:
* @param matchingAttributes the attributes to search for. If empty or
* null, all objects in the target context are returned.
* @return a non-null enumeration of SearchResult objects. Each
* SearchResult contains the attributes identified by attributesToReturn
* and the name of the corresponding object, named relative to the
* context named by name.
* @exception NamingException if a naming exception is encountered
*/
public NamingEnumeration search(String name, Attributes matchingAttributes)
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.
*
* @param name the name of the context or object to search
* @param filter the filter expression to use for the search; may not be
* null
* @param cons the search controls that control the search. If null,
* the default search controls are used (equivalent to
* (new SearchControls())).
* @return an enumeration of SearchResults of the objects that satisfy
* the filter; never null
* @exception InvalidSearchFilterException if the search filter specified
* is not supported or understood by the underlying directory
* @exception InvalidSearchControlsException if the search controls
* contain invalid settings
* @exception NamingException if a naming exception is encountered
*/
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.
*
* @param name the name of the context or object to search
* @param filterExpr the filter expression to use for the search.
* The expression may contain variables of the form "{i}" where i is a
* nonnegative integer. May not be null.
* @param filterArgs the array of arguments to substitute for the
* variables in filterExpr. The value of filterArgs[i] will replace each
* occurrence of "{i}". If null, equivalent to an empty array.
* @param cons the search controls that control the search. If null, the
* default search controls are used (equivalent to (new SearchControls())).
* @return an enumeration of SearchResults of the objects that satisy the
* filter; never null
* @exception ArrayIndexOutOfBoundsException if filterExpr contains {i}
* expressions where i is outside the bounds of the array filterArgs
* @exception InvalidSearchControlsException if cons contains invalid
* settings
* @exception InvalidSearchFilterException if filterExpr with filterArgs
* represents an invalid search filter
* @exception NamingException if a naming exception is encountered
*/
public NamingEnumeration search(String name, String filterExpr,
Object[] filterArgs, SearchControls cons)
throws NamingException {
throw new OperationNotSupportedException();
}
// ------------------------------------------------------ Protected Methods
/**
* Normalize the name of an entry read from the Zip.
*/
protected String normalize(ZipEntry entry) {
String result = "/" + entry.getName();
if (entry.isDirectory()) {
result = result.substring(0, result.length() - 1);
}
return result;
}
/**
* Constructs a tree of the entries contained in a WAR file.
*/
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) {
}
}
/**
* Entry tree lookup.
*/
protected 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;
}
/**
* List children as objects.
*/
protected ArrayList list(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;
}
// ---------------------------------------------------- Entries Inner Class
/**
* Entries structure.
*/
protected class Entry implements Comparable {
// -------------------------------------------------------- Constructor
public Entry(String name, ZipEntry entry) {
this.name = name;
this.entry = entry;
}
// --------------------------------------------------- Member Variables
protected String name = null;
protected ZipEntry entry = null;
protected Entry children[] = new Entry[0];
// ----------------------------------------------------- Public Methods
public int compareTo(Object o) {
if (!(o instanceof Entry))
return (+1);
return (name.compareTo(((Entry) o).getName()));
}
public ZipEntry getEntry() {
return entry;
}
public String getName() {
return name;
}
public void addChild(Entry entry) {
Entry[] newChildren = new Entry[children.length + 1];
for (int i = 0; i < children.length; i++)
newChildren[i] = children[i];
newChildren[children.length] = entry;
children = newChildren;
}
public Entry[] getChildren() {
return children;
}
public Entry getChild(String name) {
for (int i = 0; i < children.length; i++) {
if (children[i].name.equals(name)) {
return children[i];
}
}
return null;
}
}
// ------------------------------------------------ WARResource Inner Class
/**
* This specialized resource implementation avoids opening the IputStream
* to the WAR right away.
*/
protected class WARResource extends Resource {
// -------------------------------------------------------- Constructor
public WARResource(ZipEntry entry) {
this.entry = entry;
}
// --------------------------------------------------- Member Variables
protected ZipEntry entry;
// ----------------------------------------------------- Public Methods
/**
* Content accessor.
*
* @return InputStream
*/
public InputStream streamContent()
throws IOException {
try {
if (binaryContent == null) {
inputStream = base.getInputStream(entry);
}
} catch (ZipException e) {
throw new IOException(e.getMessage());
}
return super.streamContent();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -