Package org.w3c.jigedit.filters

Source Code of org.w3c.jigedit.filters.PutListFrame

// PutListResource.java
// $Id: PutListFrame.java,v 1.11 2007/02/09 21:17:19 ylafon Exp $
// (c) COPYRIGHT MIT and INRIA, 1996.
// Please first read the full copyright statement in file COPYRIGHT.html

package org.w3c.jigedit.filters;

import java.io.File;
import java.io.PrintStream;

import java.util.Date;
import java.util.Enumeration;
import java.util.Vector;

import java.net.URL;

import org.w3c.tools.resources.FramedResource;
import org.w3c.tools.resources.ProtocolException;
import org.w3c.tools.resources.ReplyInterface;
import org.w3c.tools.resources.RequestInterface;
import org.w3c.tools.resources.ResourceException;

import org.w3c.tools.resources.ProtocolException;

import org.w3c.cvs.CVS;
import org.w3c.cvs.CvsDirectory;
import org.w3c.cvs.CvsException;

import org.w3c.jigsaw.auth.AuthFilter;

import org.w3c.jigsaw.http.HTTPException;
import org.w3c.jigsaw.http.Reply;
import org.w3c.jigsaw.http.Request;

import org.w3c.jigsaw.frames.HTTPFrame;
import org.w3c.jigsaw.frames.PostableFrame;

import org.w3c.www.http.HTTP;
import org.w3c.www.http.HttpMessage;
import org.w3c.www.http.HttpRequestMessage;

import org.w3c.jigsaw.forms.URLDecoder;

import org.w3c.jigsaw.html.HtmlGenerator;

public class PutListFrame extends PostableFrame {

    PutListResource putlist = null;

    public void registerResource(FramedResource resource) {
  super.registerResource(resource);
  if (resource instanceof PutListResource) {
      putlist = (PutListResource) resource;
  }
    }

    /**
     * perform the request.
     * @param req the incomming request.
     * @exception org.w3c.tools.resources.ProtocolException if a protocol
     * error occurs
     * @exception org.w3c.tools.resources.ResourceException if a server
     * error occurs
     */
    public ReplyInterface perform(RequestInterface req)
  throws ProtocolException, ResourceException
    {
  if (putlist == null) {
      Request request = (Request) req;
      Reply error = request.makeReply(HTTP.INTERNAL_SERVER_ERROR) ;
      error.setContent("The PutListFrame must be associated "+
           "with a PutListResource only!!");
      throw new HTTPException(error);
  }
  return super.perform(req);
    }

    protected HtmlGenerator getHtmlGenerator(String title) {
  HtmlGenerator g = new HtmlGenerator(title);
  addStyleSheet(g);
  return g;
    }

    /**
     * Dump the list of modified files.
     * @param request The request to handle.
     * @return A Reply instance.
     * @exception org.w3c.tools.resources.ProtocolException if a protocol
     * error occurs
     * @exception org.w3c.tools.resources.ResourceException if a server
     * error occurs
     */

    public Reply get(Request request)
  throws ProtocolException, ResourceException
    {
  HtmlGenerator g = getHtmlGenerator("Modified files");
  g.append("<h1>List of recently published files</h1>\n");
  Enumeration penum = putlist.getPublishedEntries();
  if (! penum.hasMoreElements())
      g.append("<center><b>No recently published file</b></center>\n");
  g.append("<ul>\n");
 
  Vector sorted =
      org.w3c.tools.sorter.Sorter.sortComparableEnumeration(penum);

  for (int i=0; i < sorted.size(); i++) {
      PutedEntry e      = (PutedEntry) sorted.elementAt(i);
      String     url    = e.getURL();
      g.append("<li><a href=\"",
         url,
         "\">"+url+"</a>");
      g.append("<br>Published by <em>"+e.getAuthor()+"</em> on <strong>",
         new Date(e.getTime()).toString(),
         "</strong>.</li>\n");
  }

  g.append("</ul>\n");

  penum = putlist.getEntries();
  if (penum.hasMoreElements()) {
      g.append("<h1>List of modified files</h1>\n");
      g.append("<form action=\""+request.getURL()+
         "\" method=\"POST\">\n");
      g.append("<dl>\n");
      // Dump all entries:
      sorted =
    org.w3c.tools.sorter.Sorter.sortComparableEnumeration(penum);

      for (int i=0; i < sorted.size(); i++) {
    PutedEntry e      = (PutedEntry) sorted.elementAt(i);
    String     fname  = e.getFilename();
    String     author = e.getAuthor();
    long       time   = e.getTime();
    String     url    = e.getURL();

    g.append("<dt><input type=\"checkbox\" name=\""+
       e.getKey() + "\" value =\"mark\">",
       (fname != null) ? fname : url,
       "</dt><dd>");
    if ( fname != null ) {
        File         file    = new File(fname);
        File         dir     = new File(file.getParent());
        // Compute the CVS directory URL for the file:
        URL          cvsurl  = null;
        try {
      cvsurl  = new URL(new URL(url), "CVS");
        } catch (Exception ex) {
      cvsurl = null;
        }
        // Display status:
        int st = -1;
        try {
      // Local status first:
      CvsDirectory cvs =
          CvsDirectory.getManager(dir,
                putlist.props);
      st  = cvs.status(file.getName());
      if ( cvsurl != null )
          g.append("Status: <a href=\""+cvsurl+ "\">"
             , cvs.statusToString(st)
             , "</a><br>");
      else
          g.append("Status: "
             , cvs.statusToString(st)
             , "<br>");

      if (url != null)
          g.append("URL: <a href=\"",
             url,
             "\">"+url+"</a><br>");
   
        } catch (CvsException ex) {
      g.append("Status: <strong>CVS ERROR</strong>: "
         , ex.getMessage()
         , "<br>");
        }
        // Publish status next (when possible)
        if ( st != CVS.FILE_Q ) {
      try {
          File         sf  = putlist.getServerFile(file);
          File         sd  = new File(sf.getParent());
          CvsDirectory sc  =
        CvsDirectory.getManager(sd, putlist.props);
          int          sst = sc.status(file.getName());
          if (sst == CVS.FILE_C) {
        g.append("Publish: (needed) <B><U>",
           sc.statusToString(sst),
           "</U></B><br>");
          } else if ((st == CVS.FILE_M) ||
               (sst != CVS.FILE_OK))
        {
            g.append("Publish: (needed) <em>"
               , sc.statusToString(sst)
               , "</em><br>");
        } else {
            g.append("Publish: <em>"
               , sc.statusToString(sst)
               , "</em><br>");
        }
      } catch (CvsException ex) {
          g.append("Publish: <strong>CVS ERROR</strong>: "
             , ex.getMessage()
             , "<br>");
      }
        }
    }
    // Display author:
    if ( author != null )
        g.append("Modified by <em>"+author+"</em> on <strong>"+
           new Date(time).toString() + "</strong>.<br>\n");
    else
        g.append("Modified on <strong>"+
           new Date(time).toString()+
           "</strong>.<br>\n");
      }
      g.append("</dl>\n");
      // The command button:
      g.append ("<hr noshade width=\"40%\">\n<center>\n",
          "<table border=\"0\">",
          "<tr align=\"left\"><td>\n");
      g.append ("<b>Perform action on marked entries:</b><p>\n") ;
      g.append ("<input type=\"radio\" name=\"action\" ",
          "value=\"publish\">Publish<br>\n");
      g.append ("<input type=\"radio\" name=\"action\" value=\"remove\">"
          + "Remove \n");
      g.append ("</p><center>\n") ;
      g.append ("<input type=\"submit\" name=\"submit\" "+
          "value=\"Perform Action\">\n") ;
      g.append ("</center>");
      g.append ("</form>\n") ;
      g.append ("</td></tr></table></center>\n");
  }

  penum = putlist.getDelEntries();
  if (penum.hasMoreElements()) {
      g.append("<h1>List of deleted files</h1>\n");
      g.append("<form action=\""+request.getURL()+
         "\" method=\"POST\">\n");
      g.append("<dl>\n");
      //Dump only confirmed entries
      sorted =
    org.w3c.tools.sorter.Sorter.sortComparableEnumeration(penum);
      for (int i=0; i < sorted.size(); i++) {
    DeletedEntry e = (DeletedEntry) sorted.elementAt(i);
    if (e.isConfirmed()) {
        String     fname  = e.getFilename();
        String     author = e.getAuthor();
        long       time   = e.getTime();
        String     url    = e.getURL();
        g.append("<dt><input type=\"checkbox\" name=\""+
           e.getKey() + "\" value =\"mark\">",
           (fname != null) ? fname : url,
           "</dt><dd>");
        if (url != null)
      g.append("URL: <b>"+url+"</b><br>");
        // Display author:
        if ( author != null )
      g.append("Deleted by <em>"+
         author+"</em> on <strong>"+
         new Date(time).toString() +
         "</strong>.<br>\n");
        else
      g.append("Deleted on <strong>"+
         new Date(time).toString()+
         "</strong>.<br>\n");
    }
      }
      g.append("</dl>\n");
      // The command button:
      g.append ("<hr noshade width=\"40%\">\n<center>\n",
          "<table border=\"0\">",
          "<tr align=\"left\"><td>\n");
      g.append ("<b>Perform action on marked entries:</b><p>\n") ;
      g.append ("<input type=\"radio\" name=\"action\" ",
          "value=\"delete\">Delete<br>\n");
      g.append ("<input type=\"radio\" name=\"action\" "+
          "value=\"removedel\">Remove \n");
      g.append ("</p><center>\n") ;
      g.append ("<input type=\"submit\" name=\"submit\" "+
          "value=\"Perform Action\">\n") ;
      g.append ("</center>");
      g.append ("</form>\n") ;
      g.append ("</td></tr></table></center>\n");
  }

  g.append ("<h1>Putlist Configuration</h1>");
  g.append ("<center>");
  g.append ("<table border=\"0\"><tr align=\"left\"><td>");
  g.append ("<form action=\""+request.getURL()+"\" method=\"POST\">\n");
  g.append ("<input type=\"hidden\" name=\"action\" value=\"config\">");
  g.append ("<input type=\"checkbox\"",
      (putlist.getAutoPublishFlag() ? " CHECKED " : " "),
      "name=\"autopublish\" value=\"mark\"> Auto Publish<br>");
  g.append ("<input type=\"checkbox\"",
      (putlist.getAutoDeleteFlag() ? " CHECKED " : " "),
      "name=\"autodelete\" value=\"mark\"> Auto Delete<br>");
  g.append ("Max published entries <input type=\"text\" "+
      "size=\"3\" maxlength=\"2\" name=\"mpe\" value=\""+
      putlist.getMaxPublishedEntryStored()+
      "\">");
  g.append ("</p><center>");
  g.append ("<input type=\"submit\" name=\"submit\" "+
      "value=\"Save Configuration\">") ;
  g.append ("</center></form>\n");
  g.append ("</td></tr></table>\n");
  g.append ("</center>");
  g.append ("<hr noshade width=\"80%\">");
  g.close();
  Reply reply = createDefaultReply(request, HTTP.OK);
  reply.addPragma("no-cache");
  reply.setNoCache();
  reply.setStream(g);
  return reply;
    }

    protected void performAction(Request request, String action, String key)
  throws HTTPException
    {

  if ( action.equals("publish") ) {
      PutedEntry pe = (PutedEntry) putlist.getEntry(key);
      if ( pe == null ) {
    // We're in troubles !
    if ( putlist.debug )
        System.out.println("PutList: "+key+" not found !");
    return ;
      }
      if (putlist.publish(pe) == PutListResource.FILE_CF) {
    //send error.
    Reply error = request.makeReply(HTTP.CONFLICT);
    HtmlGenerator gerr = getHtmlGenerator("Warning");
    gerr.append ("<H1>Warning</H1> The file on publish space has "+
           "been modified directly and attempting to merge"+
           " has failed.<p>"+
           "Ask your system administrator.");
    error.setStream(gerr);
    throw new HTTPException(error);
      }
  } else if ( action.equals("delete") ) {
      DeletedEntry de = (DeletedEntry) putlist.getDelEntry(key);
      if (de == null) {
    // We're in troubles !
    if ( putlist.debug )
        System.out.println("PutList: "+key+" not found !");
    return ;
      }
      putlist.delete(de);
  } else if ( action.equals("remove") ) {
      putlist.removeEntry(key);
  } else if ( action.equals("removedel") ) {
      putlist.removeDelEntry(key);
  } else if ( putlist.debug ) {
      System.out.println("PutList: "+action+" unknown.");
  }
    }

    /**
     * handle the request.
     * @param request the incomming request.
     * @param data the URLDecoder.
     * @exception org.w3c.tools.resources.ProtocolException if a protocol
     * error occurs
     */

    public Reply handle(Request request, org.w3c.jigsaw.forms.URLDecoder data)
  throws ProtocolException
    {
  // Get the action to perform:
  String action = data.getValue("action");
  if (action == null) {
      Reply error = request.makeReply(HTTP.INTERNAL_SERVER_ERROR);
      error.setContent("You must select the action to be performed.");
      return error;
  }
  if (action.equals("config")) {
      if (data.getValue("autopublish") != null)
    putlist.setAutoPublish(true);
      else
    putlist.setAutoPublish(false);

      if (data.getValue("autodelete") != null)
    putlist.setAutoDelete(true);
      else
    putlist.setAutoDelete(false);

      String max = null;
      if ((max = data.getValue("mpe")) != null) {
    try {
        putlist.setMaxPublishedEntryStored(Integer.parseInt(max));
    } catch (NumberFormatException ex) {
        Reply error = request.makeReply(HTTP.BAD_REQUEST);
        error.setContent("Invalid number : "+max);
        return error;
    }
      }
  } else {
      Enumeration genum = null;
      if (action.equals("publish") || action.equals("remove"))
    genum = putlist.getEntriesKeys();
      else
    genum = putlist.getDelEntriesKeys();
      // Check all entries and perform action:
      while ( genum.hasMoreElements() ) {
    String key = (String) genum.nextElement();
    if (data.getValue(key) != null) {
        // Perform action on that entry:
        if ( putlist.debug )
      System.out.println("PutList: "+action+" on "+key);
        performAction(request, action, key);
    } else {
        if ( putlist.debug )
      System.out.println("PutList: "+key+" not marked !");
    }
      }
  }
  try {
      return get(request);
  } catch (ResourceException ex) {
      Reply error = request.makeReply(HTTP.INTERNAL_SERVER_ERROR);
      error.setContent(ex.getMessage());
      return error;
  }
    }
} // PutListFrame
TOP

Related Classes of org.w3c.jigedit.filters.PutListFrame

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.