⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 plainremoteresource.java

📁 很棒的web服务器源代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
// PlainRemoteResource.java// $Id: PlainRemoteResource.java,v 1.31 2000/08/16 21:37:34 ylafon Exp $// (c) COPYRIGHT MIT and INRIA, 1997.// Please first read the full copyright statement in file COPYRIGHT.htmlpackage org.w3c.jigsaw.admin;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.io.PrintStream;import java.net.MalformedURLException;import java.net.URL;import java.net.URLEncoder;import java.util.zip.GZIPInputStream;import java.util.zip.GZIPOutputStream;import org.w3c.tools.resources.Attribute;import org.w3c.tools.resources.SimpleAttribute;import org.w3c.tools.resources.ArrayAttribute;import org.w3c.tools.resources.serialization.AttributeDescription;import org.w3c.tools.resources.serialization.EmptyDescription;import org.w3c.tools.resources.serialization.ResourceDescription;import org.w3c.www.protocol.http.HttpManager;import org.w3c.www.protocol.http.Reply;import org.w3c.www.protocol.http.Request;public class PlainRemoteResource implements RemoteResource {    private static final boolean debug = false;    /**     * The client side admin context     */    protected AdminContext admin = null;    /**     * The remote resource set of attributes.     */    protected AttributeDescription attributes[];    /**     * The remote resource attribute values.     */    protected Object values[] = null;    /**     * Is that resource a container resource ?     */    protected boolean iscontainer = false;    /**     * Is that resource a indexers catalog ?     */    protected boolean isindexerscatalog = false;    /**     * Is that resource a directory resource ?     */    protected boolean isDirectoryResource = false;    /**     * Is that resource a framed resource ?     */    protected boolean isframed = false;    /**     * The name of that resource (ie it's identifier attribute).     */    protected String identifier = null;    /**     * The name of the parent of that resource, as an URL.     */    protected URL parent = null;    /**     * The admin URL for the wrapped resource.     */    protected URL url = null;    /**     * Set of attached frames.     */    protected RemoteResource frames[] = null;    /**     * Our description     */    protected ResourceDescription description = null;    protected Request createRequest() {	Request request = admin.http.createRequest();	request.setURL(url);	if (!debug) {	    request.setValue("TE", "gzip");	}	return request;    }    protected InputStream getInputStream(Reply reply) 	throws IOException    {	if (reply.hasTransferEncoding("gzip"))	    return new GZIPInputStream(reply.getInputStream());	else	    return reply.getInputStream();	    }    protected void setFrames(RemoteResource frames[]) {	this.isframed  = true;	this.frames    = frames;    }    /**     * Get the target resource class hierarchy.     * This method will return the class hierarchy as an array of String. The     * first string in the array is the name of the resource class itself, the     * last string will always be <em>java.lang.Object</em>.     * @return A String array givimg the target resource's class description.     * @exception RemoteAccessException If somenetwork failure occured.     */    public String[] getClassHierarchy()	throws RemoteAccessException    {	return description.getClassHierarchy();    }    /**     * Reindex the resource's children if this resource is a DirectoryResource.     * @exception RemoteAccessException If it's not a DirectoryResource     */    public void reindex(boolean rec)	throws RemoteAccessException    {	if (isDirectoryResource()) {	    try {		Request req = createRequest();		// Prepare the request:		if (rec) {		    req.setMethod("REINDEX-RESOURCE");		} else {		    req.setMethod("REINDEX-LOCALLY");		}		// Run it:		Reply rep = admin.runRequest(req);	    } catch (RemoteAccessException rae) {		throw rae;	    } catch (Exception ex) {		ex.printStackTrace();		throw new RemoteAccessException(ex.getMessage());	    }	} else {	    throw new RemoteAccessException("Error, can't reindex! This is "+					    "not a DirectoryResource.");	}    }    /**     * Delete that resource, and detach it from its container.     * @exception RemoteAccessException If somenetwork failure occured.     */    public void delete()	throws RemoteAccessException    {	try {	    Request req = createRequest();	    // Prepare the request:	    req.setMethod("DELETE-RESOURCE");	    // Run it:	    Reply rep = admin.runRequest(req);	} catch (RemoteAccessException rae) {	    throw rae;	} catch (Exception ex) {	    ex.printStackTrace();	    throw new RemoteAccessException(ex.getMessage());	}    }    /**     * Get the target resource list of attributes.     * This method returns the target resource attributes description. The     * resulting array contains instances of the Attribute class, one item     * per described attributes.     * <p>Even though this returns all the attribute resources, only the     * ones that are advertized as being editable can be set through this     * interface.     * @return An array of Attribute.     * @exception RemoteAccessException If somenetwork failure occured.     */    public synchronized AttributeDescription[] getAttributes()	throws RemoteAccessException    {	return description.getAttributeDescriptions();    }    /**     * @param name The attribute whose value is to be fetched, encoded as     * its name.     * @exception RemoteAccessException If somenetwork failure occured.     */    public Object getValue(String attr)	throws RemoteAccessException    {	if (attr.equals("identifier")) {	    return identifier;	}	String attrs[] = new String[1];	attrs[0] = attr;	return getValues(attrs)[0];    }    protected AttributeDescription lookupAttribute(String name) {	AttributeDescription attds[] = description.getAttributeDescriptions();	for (int i = 0 ; i < attds.length ; i++) {	    AttributeDescription ad = attds[i];	    if (ad.getName().equals(name))		return ad;	}	return null;    }    /**     * @param attrs The (ordered) set of attributes whose value is to be     * fetched.     * @return An (ordered) set of values, one per queried attribute.     * @exception RemoteAccessException If somenetwork failure occured.     */    public Object[] getValues(String attrs[])	throws RemoteAccessException    {	Object values[] = new Object[attrs.length];	for (int i = 0 ; i < attrs.length ; i++) {	    AttributeDescription ad = lookupAttribute(attrs[i]);	    if (ad != null) {		values[i] = ad.getValue();	    } else {		values[i] = null;	    }	}	return values;    }    /**     * @param attr The attribute to set, encoded as it's name.     * @param value The new value for that attribute.     * @exception RemoteAccessException If somenetwork failure occured.     */    public void setValue(String attr, Object value)	throws RemoteAccessException    {	String attrs[] = new String[1];	Object vals[] = new Object[1];	attrs[0] = attr;	vals[0] = value;	setValues(attrs, vals);    }    /**     * Set a set of attribute values in one shot.     * This method guarantees that either all setting is done, or none of     * them are.     * @param attrs The (ordered) list of attribute to set, encoded as their     * names.     * @param values The (ordered) list of values, for each of the above     * attributes.     * @exception RemoteAccessException If somenetwork failure occured.     */    public void setValues(String names[], Object values[])	throws RemoteAccessException    {	String  newId  = null;	boolean change = false;	AttributeDescription attrs[] = new AttributeDescription[names.length];	for (int i = 0 ; i < names.length ; i++) {	    AttributeDescription ad = lookupAttribute(names[i]);	    if (ad != null) {		ad.setValue(values[i]);		attrs[i] = ad;	    }	    if (names[i].equals("identifier")) {		change = true;		newId = (String) values[i];	    }	}	ResourceDescription descr = description.getClone(attrs);	try {	    ByteArrayOutputStream bout = new ByteArrayOutputStream();	    OutputStream out;	    if (debug) {		out = bout;	    } else {		out = new GZIPOutputStream(bout);	    }	    admin.writer.writeResourceDescription(descr, out);	    byte bits[] = bout.toByteArray();	    Request req = createRequest();	    req.setMethod("SET-VALUES");	    req.setContentType(admin.conftype);	    req.setContentLength(bits.length);	    if (!debug) {		req.addTransferEncoding("gzip");	    }	    req.setOutputStream(new ByteArrayInputStream(bits));		    // Run that request:	    Reply rep = admin.runRequest(req);	} catch (RemoteAccessException rae) {	    throw rae;	} catch (Exception ex) {	    ex.printStackTrace();	    throw new RemoteAccessException("exception "+ex.getMessage());	}	if(change) {	    identifier = new String(newId);	    try {		//if (parent != null) {		if (! isFrame()) {		    if (iscontainer)			url = new URL(parent.toString()+identifier+"/");		    else 			url = new URL(parent.toString()+identifier);		    // update frames url		    updateURL(new URL(parent.toString()+identifier));		} else {		    String oldFile = url.getFile();		    int index = oldFile.lastIndexOf('?');		    String newFile = oldFile.substring(0, index);		    updateURL(new URL(url, newFile));		}	    } catch (MalformedURLException ex) {		ex.printStackTrace();	    }	}	return;    }    public void updateURL(URL parentURL) {	if ( isFrame() ) {	    try {		url = new URL(parentURL, parentURL.getFile()+"?"+identifier);	    } catch (MalformedURLException ex) {		return;	    }	}	//update frames URLs	if (frames != null) {	    for(int i=0 ; i < frames.length ; i++) {		frames[i].updateURL(url);	    }	}    }    /**     * @exception RemoteAccessException If somenetwork failure occured.     */    public boolean isContainer()	throws RemoteAccessException    {	// a Hack to avoid multiple sub-trees under the main root resource	if(identifier != null) {	    if(identifier.equals("root"))		return false;	    if(identifier.equals("control")) {		String classname = getClassHierarchy()[0];		if(classname.equals("org.w3c.jigsaw.http.ControlResource"))		    return false;	    }	}	return iscontainer;    }    /**     * @exception RemoteAccessException If somenetwork failure occured.     */    public boolean isIndexersCatalog()	throws RemoteAccessException    {	return isindexerscatalog;    }    /**     * Is is a DirectoryResource     * @exception RemoteAccessException If somenetwork failure occured.     */    public boolean isDirectoryResource()	throws RemoteAccessException    {	if(identifier != null) {	    if(identifier.equals("root"))		return false;	}	return isDirectoryResource;    }    /**     * @exception RemoteAccessException If somenetwork failure occured.     */    public String[] enumerateResourceIdentifiers()	throws RemoteAccessException    {	if ( ! iscontainer )	    throw new RuntimeException("not a container");	try {	    update();	    return description.getChildren();	} catch (Exception ex) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -