cvsdavdirectoryframe.java

来自「很棒的web服务器源代码」· Java 代码 · 共 250 行

JAVA
250
字号
// CvsDAVFileFrame.java// $Id: CvsDAVDirectoryFrame.java,v 1.2 2003/03/27 16:38:46 ylafon Exp $// (c) COPYRIGHT MIT and INRIA, 1996.// Please first read the full copyright statement in file COPYRIGHT.htmlpackage org.w3c.jigedit.webdav.frames ;import java.io.File;import java.io.IOException;import java.io.PrintStream;import org.w3c.tools.resources.Attribute;import org.w3c.tools.resources.AttributeHolder;import org.w3c.tools.resources.AttributeRegistry;import org.w3c.tools.resources.BooleanAttribute;import org.w3c.tools.resources.DirectoryResource;import org.w3c.tools.resources.FileResource;import org.w3c.tools.resources.FramedResource;import org.w3c.tools.resources.InvalidResourceException;import org.w3c.tools.resources.MultipleLockException;import org.w3c.tools.resources.ProtocolException;import org.w3c.tools.resources.ReplyInterface;import org.w3c.tools.resources.RequestInterface;import org.w3c.tools.resources.Resource;import org.w3c.tools.resources.ResourceException;import org.w3c.tools.resources.ResourceFrame;import org.w3c.tools.resources.ResourceReference;import org.w3c.tools.resources.ServerInterface;import org.w3c.jigsaw.webdav.DAVFrame;import org.w3c.jigsaw.webdav.DAVRequest;import org.w3c.jigsaw.http.HTTPException;import org.w3c.jigsaw.http.Reply;import org.w3c.jigsaw.http.Request;import org.w3c.jigsaw.auth.AuthFilter;import org.w3c.www.http.HTTP;import org.w3c.www.http.HttpEntityMessage;import org.w3c.www.http.HttpMessage;import org.w3c.www.http.HttpReplyMessage;import org.w3c.www.http.HttpRequestMessage;import org.w3c.www.mime.MimeType;import org.w3c.jigsaw.html.HtmlGenerator;import org.w3c.cvs.CVS;import org.w3c.cvs.CvsAddException;import org.w3c.cvs.CvsDirectory;import org.w3c.cvs.CvsException;import org.w3c.cvs.UpToDateCheckFailedException;import org.w3c.jigedit.cvs.CvsFrame;import org.w3c.jigedit.cvs.CvsModule;/** * This subclass of HTTPFrame check cvs before performing a PUT request. * If a CVS directory exists<BR> * <ul> * If the resource file exists<BR> * <ul>  * If resource file not up to date Fail.<BR> * Else perform PUT and commit it into cvs.<BR> * </ul> * Else perform PUT, add and commit it into cvs.<BR> * </ul> * Else perform PUT. * @author Benoit Mahe <bmahe@sophia.inria.fr> */public class CvsDAVDirectoryFrame extends DAVFrame {    public static final boolean debug = true;    /**     * Attribute index, tell if we must update the resource everytime it is     * acceded (not recommended as it generates many cvs commands)     */    private static int ATTR_AUTOUPDATE = -1;    static {	Attribute   a = null ;	Class     cls = null;	try {	    cls = Class.forName("org.w3c.jigedit.webdav.frames"				+".CvsDAVDirectoryFrame");	} catch (Exception ex) {	    ex.printStackTrace() ;	    System.exit(1) ;	}	// The browsable flag:	a = new BooleanAttribute("autoupdate",				 Boolean.FALSE,				 Attribute.EDITABLE) ;	ATTR_AUTOUPDATE = AttributeRegistry.registerAttribute(cls, a) ;    }    protected static Reply error(Request request,				 int status,				 String title,				 String msg)     {	Reply error = request.makeReply(status);	HtmlGenerator g = CvsFrame.getHtmlGenerator(title);	g.append("<span class=\"title\">",title,"</span>\n");	g.append("<p>",msg);	error.setStream(g);	return error;    }    protected File resDirectory = null;    protected File getResourceDirectory() {	if (resDirectory == null) {	    FramedResource fr = getResource();	    if (fr instanceof DirectoryResource) {		resDirectory = ((DirectoryResource) fr).getDirectory();	    }	}	return resDirectory;    }    /**     * tell if we must always do an update.     */    public boolean isAutoUpdatable() {	return getBoolean(ATTR_AUTOUPDATE, false);    }    protected synchronized CvsDirectory getCvsManager() 	throws CvsException    {	return CvsModule.getCvsManager(getResourceDirectory(), 				       getContext(),				       getServer().getProperties());    }    protected boolean checkCvsManager() {	try {	    return (getCvsManager() != null);	} catch (CvsException ex) {	    return false;	}    }    /**     * @exception CvsException if the CVS process failed     */    protected void add(Request request) 	throws CvsException    {	String u = (String)request.getState(AuthFilter.STATE_AUTHUSER);	String env[] = {"USER="+u , "LOGNAME="+u };	String names [] = null;	MimeType mtype;        mtype = request.getContentType();	if (mtype != null && 	    (mtype.match(MimeType.TEXT) != MimeType.MATCH_SUBTYPE) &&	    (mtype.match(MimeType.APPLICATION_XHTML_XML) != 	                    MimeType.MATCH_SPECIFIC_SUBTYPE)) {	    names = new String[2];	    names[0] = "-kb";	    names[1] = getFileResource().getFile().getName();	} else {	    names = new String[1];	    names[0] = getFileResource().getFile().getName();	}	CvsDirectory cvsdir = null;	cvsdir = getCvsManager();	cvsdir.add(names, env);    }    /**     * @exception CvsException if the CVS process failed     */    protected void commit(Request request) 	throws CvsException    {	commit (request, "Changed through Jigsaw.");    }    /**     * @exception CvsException if the CVS process failed     */    protected void commit(Request request, String msg) 	throws CvsException    {	String u = (String)request.getState(AuthFilter.STATE_AUTHUSER);	String env[] = {"USER="+u , "LOGNAME="+u };	String comment = "("+u+") "+msg;	CvsDirectory cvsdir = null;	cvsdir = getCvsManager();	cvsdir.commit(getFileResource().getFile().getName(), comment, env);    }    /**     * @exception CvsException if the CVS process failed     */    protected void update()	throws CvsException    {	CvsDirectory cvsdir = getCvsManager();	cvsdir.update(getFileResource().getFile().getName());    }    /**     * @exception CvsException if the CVS process failed     */    protected int status()	throws CvsException    {	CvsDirectory cvsdir = getCvsManager();	return cvsdir.status(getFileResource().getFile().getName());    }    protected String statusToString(int status) {	return CvsDirectory.statusToString(status);    }    /**     * Handle the MKCOL request.     * @param request the WEBDAV request     * @return a Reply instance     * @exception ProtocolException If processsing the request failed.     * @exception ResourceException If the resource got a fatal error.     */    public Reply mkcol(DAVRequest request)	throws ProtocolException, ResourceException    {	Reply rep = super.mkcol(request);	if (rep.getStatus() == HTTP.CREATED) {	    // we created a new dir, time to add it in cvs	    String names[] = new String[1];	    // as the result is HTTP.CREATED, we know for sure that dresource	    // exists, no need to check.	    String newcol = (String) request.getState(REMAINING_PATH);	    names[0] = newcol;	    try {		getCvsManager().add(names);	    } catch (CvsException ex) {		getServer().errlog(this, ex.getMessage());	    }	}	return rep;    }}

⌨️ 快捷键说明

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