dflorey     2004/06/15 09:34:21

  Modified:    proposals/projector/src/java/org/apache/slide/projector/processor/form
                        ControlComposer.java Form.java FormHandler.java
                        Trigger.java
               proposals/projector/src/java/org/apache/slide/projector/connector
                        Connector.java
               proposals/projector/src/java/org/apache/slide/projector/processor/core
                        CachedContent.java
               proposals/projector/src/java/org/apache/slide/projector/connector/webdav
                        WebdavConnector.java
               
proposals/projector/src/java/org/apache/slide/projector/processor/process
                        Process.java ResultConfiguration.java
               proposals/projector/src/java/org/apache/slide/projector/processor/table
                        TableMapRenderer.java
               proposals/projector/src/java/org/apache/slide/projector
                        Constants.java
               proposals/projector/src/java/org/apache/slide/projector/processor
                        TemplateMapRenderer.java
  Added:       proposals/projector/src/java/org/apache/slide/projector/connector
                        UserExistsException.java
               
proposals/projector/src/java/org/apache/slide/projector/processor/security
                        CreateUser.java DeleteUser.java
               proposals/projector/src/java/org/apache/slide/projector/processor/core
                        Bookmark.java
               proposals/projector/src/java/org/apache/slide/projector/processor/access
                        Get.java Remove.java Put.java
  Removed:     
proposals/projector/src/java/org/apache/slide/projector/processor/security
                        PasswordValidator.java
               proposals/projector/src/java/org/apache/slide/projector/processor/core
                        Content.java
  Log:
  Started to build projector based admin application
  
  Revision  Changes    Path
  1.10      +0 -1      
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/form/ControlComposer.java
  
  Index: ControlComposer.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/form/ControlComposer.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- ControlComposer.java      8 Jun 2004 09:04:05 -0000       1.9
  +++ ControlComposer.java      15 Jun 2004 16:34:20 -0000      1.10
  @@ -114,7 +114,6 @@
                new ParameterDescriptor(TRIGGER_DESCRIPTIONS, new 
ParameterMessage("controlComposer/triggerDescriptions"), new ArrayValueDescriptor(
                                new MapValueDescriptor(new ParameterDescriptor[] {
                                                new 
ParameterDescriptor(Trigger.ACTION, new 
ParameterMessage("controlComposer/triggerDescriptions/action"), new 
URIValueDescriptor(), NullValue.NULL),
  -                                             new 
ParameterDescriptor(Trigger.BOOKMARK, new 
ParameterMessage("controlComposer/triggerDescriptions/bookmark"), new 
URIValueDescriptor(), NullValue.NULL),
                                                new 
ParameterDescriptor(Trigger.VALIDATE, new 
ParameterMessage("controlComposer/triggerDescriptions/validate"), new 
BooleanValueDescriptor(), BooleanValue.TRUE),
                                                        new 
ParameterDescriptor(Trigger.INVOLVED_PARAMETERS, new 
ParameterMessage("trigger/involvedParameters"), new ArrayValueDescriptor(new 
StringValueDescriptor()), NullValue.NULL),
                                                new ParameterDescriptor(Process.STEP, 
new ParameterMessage("controlComposer/triggerDescriptions/step"), new 
StringValueDescriptor()),
  
  
  
  1.10      +7 -4      
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/form/Form.java
  
  Index: Form.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/form/Form.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- Form.java 8 Jun 2004 09:04:05 -0000       1.9
  +++ Form.java 15 Jun 2004 16:34:20 -0000      1.10
  @@ -56,6 +56,10 @@
               });
   
       public Result process(Map parameter, Context context) throws Exception {
  +     Object formResult = context.getStore(Store.FORM).get(FormHandler.RESULT);
  +     if ( formResult instanceof Result ) {
  +             return (Result)formResult;  
  +     }
        URI actionUri = (URI)parameter.get(ACTION);
        Locale locale = ((LocaleValue)parameter.get(LOCALE)).getLocale();
           List informations = context.getInformations();
  @@ -122,7 +126,6 @@
                                   new ParameterDescriptor(TRIGGER, new 
ParameterMessage("form/trigger"), new URIValueDescriptor()),
                                   new ParameterDescriptor(TRIGGER_CONTAINER, new 
ParameterMessage("form/triggerContainer"),  new URIValueDescriptor(), NullValue.NULL),
                                   new ParameterDescriptor(Trigger.ACTION, new 
ParameterMessage("trigger/action"), new URIValueDescriptor(), NullValue.NULL),
  -                                             new 
ParameterDescriptor(Trigger.BOOKMARK, new ParameterMessage("trigger/bookmark"), new 
URIValueDescriptor(), NullValue.NULL),
                                                        new 
ParameterDescriptor(Trigger.VALIDATE, new ParameterMessage("trigger/validate"), new 
BooleanValueDescriptor(), BooleanValue.TRUE),
                                   new ParameterDescriptor(Process.STEP, new 
ParameterMessage("trigger/step"),  new ResourceValueDescriptor(), NullValue.NULL)
                               })));
  
  
  
  1.13      +8 -3      
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/form/FormHandler.java
  
  Index: FormHandler.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/form/FormHandler.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- FormHandler.java  10 Jun 2004 16:14:12 -0000      1.12
  +++ FormHandler.java  15 Jun 2004 16:34:20 -0000      1.13
  @@ -26,6 +26,8 @@
    */
   
   public class FormHandler implements Processor {
  +     public final static String RESULT = "result";
  +
        private final static String INSTRUCTION_IDENTIFIER = "instruction:";
        
        private final static ParameterDescriptor[] parameterDescriptors = new 
ParameterDescriptor[0];
  @@ -59,7 +61,6 @@
                boolean wizard = Boolean.valueOf(tokenizer.nextToken()).booleanValue();
                String lastStep = tokenizer.nextToken();
                String targetStep = tokenizer.nextToken();
  -             URI bookmarkUri = new URIValue(tokenizer.nextToken());
                String domain = tokenizer.nextToken();
                List involvedParamters = new ArrayList();
                while ( tokenizer.hasMoreTokens() ) {
  @@ -101,7 +102,11 @@
                }
        }
        // 4. Launch target step if validation is successfull
  -             Processor bookmark = 
ProcessorManager.getInstance().getProcessor(bookmarkUri);
  +             Processor formProcess = 
ProcessorManager.getInstance().getProcessor(new URIValue(domain));
  +        map.remove(RESULT);
  +        Result formResult = formProcess.process(parameter,  context);
  +        map.put(RESULT, formResult);
  +             Processor bookmark = 
ProcessorManager.getInstance().getProcessor(context.getBookmark());
           return bookmark.process(parameter,  context);
       }
   
  
  
  
  1.11      +5 -12     
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/form/Trigger.java
  
  Index: Trigger.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/form/Trigger.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- Trigger.java      10 Jun 2004 16:14:12 -0000      1.10
  +++ Trigger.java      15 Jun 2004 16:34:20 -0000      1.11
  @@ -31,8 +31,7 @@
       public final static String ACTION = "action";
       public final static String VALIDATE = "validate";
       public final static String WIZARD = "wizard";
  -     public final static String BOOKMARK = "bookmark";
  -     public final static String INVOLVED_PARAMETERS = "involved-parameters";
  +     public final static String INVOLVED_PARAMETERS = "involvedParameters";
        public final char SEPARATOR = ';';
        
       private ParameterDescriptor[] parameterDescriptors;
  @@ -42,17 +41,13 @@
       }
   
       public Result process(Map parameter, Context context) throws Exception {
  -     Value bookmark = (Value)parameter.get(BOOKMARK);
  -     if ( bookmark instanceof NullValue ) {
  -             bookmark = context.getBookmark();
  -     }
        StringValue []involvedParameters = 
(StringValue[])((ArrayValue)parameter.get(INVOLVED_PARAMETERS)).getArray();
        String targetStep = parameter.get(Process.STEP).toString();
        BooleanValue validate = (BooleanValue)parameter.get(VALIDATE);
        BooleanValue wizard = (BooleanValue)parameter.get(WIZARD);
        URI actionUri = (URI)parameter.get(ACTION);
                StringBuffer buffer = new StringBuffer(128);
  -             
buffer.append(actionUri).append(SEPARATOR).append(validate).append(SEPARATOR).append(wizard).append(SEPARATOR).append(context.getStep()).append(SEPARATOR).append(targetStep).append(SEPARATOR).append(bookmark).append(SEPARATOR).append(context.getProcess());
  +             
buffer.append(actionUri).append(SEPARATOR).append(validate).append(SEPARATOR).append(wizard).append(SEPARATOR).append(context.getStep()).append(SEPARATOR).append(targetStep).append(SEPARATOR).append(context.getProcess());
        if ( validate.booleanValue() ) {
                for ( int i = 0; i < involvedParameters.length; i++ ) {
                        buffer.append(SEPARATOR).append(involvedParameters[i]);
  @@ -66,7 +61,7 @@
       public void configure(StreamableValue config) throws ConfigurationException {
           super.configure(config);
           ParameterDescriptor[] parentParameterDescriptors = 
super.getParameterDescriptors();
  -        parameterDescriptors = new 
ParameterDescriptor[parentParameterDescriptors.length + 5];
  +        parameterDescriptors = new 
ParameterDescriptor[parentParameterDescriptors.length + 4];
           int counter = 0;
           for ( int i = 0; i < parentParameterDescriptors.length; i++ ) {
               if (!parentParameterDescriptors[i].getName().equals(FRAGMENT)) {
  @@ -81,10 +76,8 @@
           parameterDescriptors[parentParameterDescriptors.length + 1] =
               new ParameterDescriptor(VALIDATE, new 
ParameterMessage("trigger/validate"), new BooleanValueDescriptor(), BooleanValue.TRUE);
           parameterDescriptors[parentParameterDescriptors.length + 2] =
  -            new ParameterDescriptor(BOOKMARK, new 
ParameterMessage("trigger/bookmark"), new URIValueDescriptor(), NullValue.NULL );
  -        parameterDescriptors[parentParameterDescriptors.length + 3] =
               new ParameterDescriptor(INVOLVED_PARAMETERS, new 
ParameterMessage("trigger/involvedParameters"), new ArrayValueDescriptor(new 
StringValueDescriptor()));
  -        parameterDescriptors[parentParameterDescriptors.length + 4] =
  +        parameterDescriptors[parentParameterDescriptors.length + 3] =
               new ParameterDescriptor(WIZARD, new ParameterMessage("trigger/wizard"), 
new BooleanValueDescriptor(), BooleanValue.FALSE);
       }
   
  
  
  
  1.7       +10 -0     
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/connector/Connector.java
  
  Index: Connector.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/connector/Connector.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- Connector.java    10 Jun 2004 16:14:12 -0000      1.6
  +++ Connector.java    15 Jun 2004 16:34:20 -0000      1.7
  @@ -17,6 +17,16 @@
   public interface Connector {
        public Credentials login(String user, String password) throws IOException;
                
  +     public URI createUser(String user, String password, Credentials credentials) 
throws UserExistsException, IOException;
  +     
  +     public void deleteUser(URI uri, Credentials credentials) throws IOException;
  +     
  +     public void addRole(URI user, URI role, Credentials credentials) throws 
UserExistsException, IOException;
  +     
  +     public void removeRole(URI user, URI role, Credentials credentials) throws 
UserExistsException, IOException;
  +     
  +     public void changePassword(URI uri, String oldPassword, String newPassword, 
Credentials credentials) throws IOException;
  +     
        public Value getResource(URI uri, Credentials credentials) throws IOException;
   
       public ArrayValue getProperties(URI uri, Credentials credentials) throws 
IOException;
  
  
  
  1.1                  
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/connector/UserExistsException.java
  
  Index: UserExistsException.java
  ===================================================================
  /*
   * $Header: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/connector/UserExistsException.java,v
 1.1 2004/06/15 16:34:20 dflorey Exp $
   * $Revision: 1.1 $
   * $Date: 2004/06/15 16:34:20 $
   *
   * ====================================================================
   *
   * Copyright 2004 The Apache Software Foundation 
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   *
   */
  
  package org.apache.slide.projector.connector;
  
  import org.apache.slide.projector.ProcessException;
  import org.apache.slide.projector.i18n.ErrorMessage;
  
  /**
   * The UserExistsException class
   * 
   * @author <a href="mailto:[EMAIL PROTECTED]">Daniel Florey</a>
   */
  public class UserExistsException extends ProcessException {
      public UserExistsException(ErrorMessage errorMessage, Throwable cause) {
          super(errorMessage, cause);
      }
  
      public UserExistsException(ErrorMessage errorMessage) {
          super(errorMessage);
      }
  }
  
  
  
  1.1                  
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/security/CreateUser.java
  
  Index: CreateUser.java
  ===================================================================
  package org.apache.slide.projector.processor.security;
  
  import org.apache.slide.projector.connector.ConnectorFactory;
  import org.apache.slide.projector.connector.UserExistsException;
  import org.apache.slide.projector.descriptor.*;
  import org.apache.slide.projector.i18n.DefaultMessage;
  import org.apache.slide.projector.i18n.ErrorMessage;
  import org.apache.slide.projector.i18n.ParameterMessage;
  import org.apache.slide.projector.Information;
  import org.apache.slide.projector.*;
  
  import java.util.Map;
  
  /**
   * @author <a href="mailto:[EMAIL PROTECTED]">Daniel Florey</a>
   * @version $Revision: 1.1 $
   */
  
  public class CreateUser implements Processor {
      private final static String USERNAME = "username";
      private final static String PASSWORD = "password";
      private final static String RETYPE_PASSWORD = "retypePassword";
  
      private final static String VALID = "valid";
      private final static String INVALID = "invalid";
  
      public Result process(Map parameter, Context context) throws Exception {
          String username = parameter.get(USERNAME).toString();
          String retypedPassword = parameter.get(RETYPE_PASSWORD).toString();
          String password = parameter.get(PASSWORD).toString();
          String state = VALID;
          // Check spelling
          if ( !password.equals(retypedPassword) ) {
              context.addInformation(new Information(Information.ERROR, new 
ErrorMessage("register/passwordsNotIdentical"), new String[] { PASSWORD, 
RETYPE_PASSWORD }));
              state = INVALID;
          } else {
              try {
                ConnectorFactory.getConnector().createUser(username, password, 
context.getCredentials());       
              } catch ( UserExistsException exception ) {
                  context.addInformation(new Information(Information.ERROR, 
exception.getErrorMessage(), new String[] { USERNAME }));
                  state = INVALID;
              }
          }
          /*
          if ( password.equals("aaaa") ) {
              context.addInformation(new Information(Information.ERROR, new 
ErrorMessage("login/invalidPassword"), new String[] { PASSWORD }));
              state = INVALID;
          }
          */
          // Check if user already exists
          return new Result(state);
      }
  
      public ParameterDescriptor[] getParameterDescriptors() {
          return new ParameterDescriptor[] {
              new ParameterDescriptor(USERNAME, new 
ParameterMessage("create-user/username"), new StringValueDescriptor(1,24)),
              new ParameterDescriptor(PASSWORD, new 
ParameterMessage("create-user/password"), new StringValueDescriptor(1,24)),
              new ParameterDescriptor(RETYPE_PASSWORD, new 
ParameterMessage("create-user/retyped-password"), new StringValueDescriptor(1,24)),
          };
      }
  
      public ResultDescriptor getResultDescriptor() {
          return new ResultDescriptor(new StateDescriptor[] {
             new StateDescriptor(VALID, new DefaultMessage("create-user/state/valid")),
             new StateDescriptor(INVALID, new 
DefaultMessage("create-user/state/invalid"))
          });
      }
  }
  
  
  1.1                  
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/security/DeleteUser.java
  
  Index: DeleteUser.java
  ===================================================================
  /*
   * $Header: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/security/DeleteUser.java,v
 1.1 2004/06/15 16:34:20 dflorey Exp $
   * $Revision: 1.1 $
   * $Date: 2004/06/15 16:34:20 $
   *
   * ====================================================================
   *
   * Copyright 2004 The Apache Software Foundation 
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   *
   */
  
  package org.apache.slide.projector.processor.security;
  
  import org.apache.slide.projector.Context;
  import org.apache.slide.projector.Processor;
  import org.apache.slide.projector.Result;
  import org.apache.slide.projector.URI;
  import org.apache.slide.projector.connector.ConnectorFactory;
  import org.apache.slide.projector.descriptor.*;
  import org.apache.slide.projector.i18n.ParameterMessage;
  
  import java.util.Map;
  
  /**
   * The Event class
   * 
   * @author <a href="mailto:[EMAIL PROTECTED]">Daniel Florey</a>
   */
  public class DeleteUser implements Processor {
      public final static String URI = "uri";
  
      private final static ParameterDescriptor[] parameterDescriptors = new 
ParameterDescriptor[] {
          new ParameterDescriptor(URI, new 
ParameterMessage("deleteUser/parameter/uri"), new URIValueDescriptor())
      };
      private final static ResultDescriptor resultDescriptor = new 
ResultDescriptor(new StateDescriptor[] { StateDescriptor.OK_DESCRIPTOR });
  
      public Result process(Map parameter, Context context) throws Exception {
        URI uri = (URI)parameter.get(URI);
        ConnectorFactory.getConnector().deleteUser(uri, context.getCredentials());
        return Result.OK;
      }
  
      public ParameterDescriptor[] getParameterDescriptors() {
          return parameterDescriptors;
      }
  
      public ResultDescriptor getResultDescriptor() {
          return resultDescriptor;
      }
  }
  
  
  1.4       +2 -2      
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/core/CachedContent.java
  
  Index: CachedContent.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/core/CachedContent.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- CachedContent.java        10 Jun 2004 16:14:12 -0000      1.3
  +++ CachedContent.java        15 Jun 2004 16:34:20 -0000      1.4
  @@ -30,7 +30,7 @@
           URI uri = (URI)parameter.get(SimpleProcessor.INPUT);
           String url = "";
           if ( context instanceof HttpContext ) {
  -            url = 
((HttpContext)context).getContextPath()+ProcessorManager.getInstance().getURI(this)+"?input="+uri;
  +            url = 
((HttpContext)context).getContextPath()+"/"+ProcessorManager.getInstance().getURI(this)+"?input="+uri;
           }
           // check for cached result
           Map resultEntries = new HashMap();
  
  
  
  1.1                  
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/core/Bookmark.java
  
  Index: Bookmark.java
  ===================================================================
  /*
   * $Header: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/core/Bookmark.java,v
 1.1 2004/06/15 16:34:20 dflorey Exp $
   * $Revision: 1.1 $
   * $Date: 2004/06/15 16:34:20 $
   *
   * ====================================================================
   *
   * Copyright 2004 The Apache Software Foundation 
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   *
   */
  
  package org.apache.slide.projector.processor.core;
  
  import org.apache.slide.projector.Context;
  import org.apache.slide.projector.Processor;
  import org.apache.slide.projector.Result;
  import org.apache.slide.projector.URI;
  import org.apache.slide.projector.connector.ConnectorFactory;
  import org.apache.slide.projector.descriptor.*;
  import org.apache.slide.projector.i18n.ParameterMessage;
  import org.apache.slide.projector.value.BooleanValue;
  import org.apache.slide.projector.value.MapValue;
  
  import java.util.Map;
  
  /**
   * The Event class
   * 
   * @author <a href="mailto:[EMAIL PROTECTED]">Daniel Florey</a>
   */
  public class Bookmark implements Processor {
      public final static String BOOKMARK = "bookmark";
  
      private final static ParameterDescriptor[] parameterDescriptors = new 
ParameterDescriptor[] {
          new ParameterDescriptor(BOOKMARK, new 
ParameterMessage("bookmark/parameter/bookmark"), new URIValueDescriptor())
      };
      private final static ResultDescriptor resultDescriptor = new 
ResultDescriptor(new StateDescriptor[] { StateDescriptor.OK_DESCRIPTOR });
  
      public Result process(Map parameter, Context context) throws Exception {
          URI bookmarkUri = (URI)parameter.get(BOOKMARK);
          context.setBookmark(bookmarkUri);
          return Result.OK;
      }
  
      public ParameterDescriptor[] getParameterDescriptors() {
          return parameterDescriptors;
      }
  
      public ResultDescriptor getResultDescriptor() {
          return resultDescriptor;
      }
  }
  
  
  
  1.11      +101 -1    
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/connector/webdav/WebdavConnector.java
  
  Index: WebdavConnector.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/connector/webdav/WebdavConnector.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- WebdavConnector.java      10 Jun 2004 16:14:12 -0000      1.10
  +++ WebdavConnector.java      15 Jun 2004 16:34:20 -0000      1.11
  @@ -1,6 +1,7 @@
   package org.apache.slide.projector.connector.webdav;
   
   import org.apache.commons.httpclient.Credentials;
  +import org.apache.commons.httpclient.Header;
   import org.apache.commons.httpclient.HttpConnection;
   import org.apache.commons.httpclient.HttpState;
   import org.apache.commons.httpclient.HttpStatus;
  @@ -12,20 +13,30 @@
   import org.apache.slide.projector.URI;
   import org.apache.slide.projector.connector.Connector;
   import org.apache.slide.projector.connector.Subscriber;
  +import org.apache.slide.projector.connector.UserExistsException;
  +import org.apache.slide.projector.i18n.ErrorMessage;
   import org.apache.slide.projector.value.*;
   import org.apache.webdav.lib.Property;
  +import org.apache.webdav.lib.PropertyName;
  +import org.apache.webdav.lib.methods.MkcolMethod;
   import org.apache.webdav.lib.methods.PropFindMethod;
  +import org.apache.webdav.lib.methods.PropPatchMethod;
   import org.apache.webdav.lib.methods.SearchMethod;
  +import org.jdom.Element;
  +import org.jdom.input.DOMBuilder;
  +import org.jdom.output.XMLOutputter;
   
   import java.io.IOException;
   import java.io.InputStream;
   import java.util.*;
  -import java.util.logging.Level;
   import java.util.logging.Logger;
   
   public class WebdavConnector implements Connector {
       private static Logger logger = 
Logger.getLogger(WebdavConnector.class.getName());
   
  +    private static final String SLIDE_NAMESPACE = 
"http://jakarta.apache.org/slide/";;
  +    private static final String DAV_NAMESPACE = "DAV:";
  +
       private static WebdavConnector webdavConnector = new WebdavConnector();
       private static WebdavDispatcher dispatcher = new 
WebdavDispatcher(Constants.NOTIFICATION_HOST, Constants.NOTIFICATION_PORT,
               Constants.REPOSITORY_HOST, Constants.REPOSITORY_PORT, 
Constants.REPOSITORY_PROTOCOL, Constants.REPOSITORY_DOMAIN, Constants.POLL_INTERVAL);
  @@ -51,6 +62,47 @@
           return null;
       }
       
  +    public URI createUser(String username, String password, Credentials 
credentials) throws UserExistsException, IOException {
  +     Value userExists = getResource(new 
URIValue(Constants.REPOSITORY_DOMAIN+Constants.USERS_DIR+username), credentials); 
  +     if ( userExists == NullValue.NULL || userExists != null ) {
  +            throw new UserExistsException(new ErrorMessage("userExists", new 
String[] { username }));
  +        } else {
  +             URI userUri = new 
URIValue(Constants.REPOSITORY_DOMAIN+Constants.USERS_DIR+username);
  +             MkcolMethod mkcolMethod = new MkcolMethod(userUri.toString());
  +             mkcolMethod.setDoAuthentication(true);
  +            HttpState httpState = new HttpState();
  +            httpState.setCredentials(null, Constants.REPOSITORY_HOST, credentials);
  +            int state = mkcolMethod.execute(httpState, new 
HttpConnection(Constants.REPOSITORY_HOST, Constants.REPOSITORY_PORT, 
Constants.REPOSITORY_PROTOCOL));
  +            if ( state == HttpStatus.SC_CREATED ) {
  +             changePassword(userUri, null, password, credentials);
  +                             addRole(userUri, new 
URIValue(Constants.REPOSITORY_DOMAIN+Constants.ROLES_DIR+"root"), credentials);
  +             return userUri;
  +            }
  +            return null;
  +        }
  +    }
  +    
  +    public void deleteUser(URI uri, Credentials credentials) throws IOException {
  +     removeResource(uri, credentials);
  +    }
  +    
  +    public void addRole(URI user, URI role, Credentials credentials) throws 
IOException {
  +             XMLValue roleElement = getPropertyAsXMLValue(role, DAV_NAMESPACE, 
"group-member-set", credentials);
  +        Element newElement = new Element("href", "DAV:");
  +        newElement.addContent(user.toString());
  +        roleElement.getRootElement().addContent(newElement);
  +        XMLOutputter xout = new XMLOutputter();
  +        String groupMemberSet = xout.outputString(roleElement.getRootElement());
  +             setProperty(role, DAV_NAMESPACE, "group-member-set", groupMemberSet, 
credentials);    
  +    }
  +    
  +    public void removeRole(URI user, URI role, Credentials credentials) throws 
IOException {
  +    }
  +    
  +    public void changePassword(URI uri, String oldPassword, String newPassword, 
Credentials credentials) throws IOException {
  +             setProperty(uri, SLIDE_NAMESPACE, "password", newPassword, 
credentials);
  +    }
  +
       public Value getResource(URI uri, Credentials credentials) throws IOException {
           String url = uri.toString();
           GetMethod getMethod = new GetMethod(url);
  @@ -64,8 +116,56 @@
           InputStream stream = getMethod.getResponseBodyAsStream();
           String contentType = getMethod.getResponseHeader("Content-type").getValue();
           String characterEncoding = getMethod.getResponseCharSet();
  +        Header contentLengthHeader = getMethod.getResponseHeader("Content-length");
  +        if ( contentLengthHeader == null ) return NullValue.NULL;
           int contentLength = 
Integer.parseInt(getMethod.getResponseHeader("Content-length").getValue());
           return new InputStreamValue(stream, contentType, characterEncoding, 
contentLength, true);
  +    }
  +
  +    public void setProperty(URI uri, String namespace, String name, String value, 
Credentials credentials) throws IOException {
  +        PropPatchMethod proppatchMethod = new PropPatchMethod(uri.toString());
  +        proppatchMethod.setDoAuthentication(true);
  +        HttpState httpState = new HttpState();
  +        httpState.setCredentials(null, Constants.REPOSITORY_HOST, credentials);
  +        proppatchMethod.addPropertyToSet(name, value, "S", namespace);
  +        int state = proppatchMethod.execute(httpState, new 
HttpConnection(Constants.REPOSITORY_HOST, Constants.REPOSITORY_PORT, 
Constants.REPOSITORY_PROTOCOL));
  +        if ( state != HttpStatus.SC_MULTI_STATUS ) {
  +             throw new IOException("Received status code "+state+" when doing 
PROPPATH on URI="+uri);
  +        }
  +    }
  +
  +    public Value getPropertyAsStringValue(URI uri, String namespace, String name, 
Credentials credentials) throws IOException {
  +             Property property = getProperty(uri, namespace, name, credentials);
  +             if ( property == null ) return null;
  +        return new StringValue(property.getPropertyAsString());
  +    }
  +
  +    public XMLValue getPropertyAsXMLValue(URI uri, String namespace, String name, 
Credentials credentials) throws IOException {
  +             Property property = getProperty(uri, namespace, name, credentials);
  +             if ( property == null ) return null;
  +             DOMBuilder builder = new DOMBuilder();
  +        Element element = builder.build(property.getElement());
  +             return new ElementValue(element);
  +    }
  +
  +     private Property getProperty(URI uri, String namespace, String name, 
Credentials credentials) throws IOException {
  +             String url = uri.toString();
  +        PropFindMethod propfindMethod = new PropFindMethod(url, 0);
  +        propfindMethod.setDoAuthentication(true);
  +        HttpState httpState = new HttpState();
  +        httpState.setCredentials(null, Constants.REPOSITORY_HOST, credentials);
  +        Vector props = new Vector();
  +        props.add(new PropertyName(namespace, name));
  +             propfindMethod.setPropertyNames(props.elements());
  +        int state = propfindMethod.execute(httpState, new 
HttpConnection(Constants.REPOSITORY_HOST, Constants.REPOSITORY_PORT, 
Constants.REPOSITORY_PROTOCOL));
  +        if ( state != HttpStatus.SC_MULTI_STATUS ) {
  +            throw new IOException("Received status code "+state+" when doing 
PROPFIND on URI="+url);
  +        }
  +        Enumeration propertyEnumeration = propfindMethod.getResponseProperties(url);
  +        if ( propertyEnumeration.hasMoreElements() ) {
  +             return (Property)propertyEnumeration.nextElement();
  +        }
  +        return null;
       }
   
       public ArrayValue getProperties(URI uri, Credentials credentials) throws 
IOException {
  
  
  
  1.1                  
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/access/Get.java
  
  Index: Get.java
  ===================================================================
  package org.apache.slide.projector.processor.access;
  
  import org.apache.slide.projector.Constants;
  import org.apache.slide.projector.Context;
  import org.apache.slide.projector.URI;
  import org.apache.slide.projector.connector.ConnectorFactory;
  import org.apache.slide.projector.descriptor.ParameterDescriptor;
  import org.apache.slide.projector.descriptor.ResultEntryDescriptor;
  import org.apache.slide.projector.descriptor.URIValueDescriptor;
  import org.apache.slide.projector.i18n.ParameterMessage;
  import org.apache.slide.projector.i18n.DefaultMessage;
  import org.apache.slide.projector.processor.SimpleProcessor;
  import org.apache.slide.projector.value.URIValue;
  import org.apache.slide.projector.value.Value;
  
  public class Get extends SimpleProcessor {
      public Value process(Value input, Context context) throws Exception {
          URI uri = new URIValue(Constants.REPOSITORY_DOMAIN+input.toString());
          return ConnectorFactory.getConnector().getResource(uri, 
context.getCredentials());
      }
  
      public ParameterDescriptor getParameterDescriptor() {
          return new ParameterDescriptor(INPUT, new 
ParameterMessage("simpleProcessor/parameter/input"), new URIValueDescriptor());
      }
  
      public ResultEntryDescriptor getResultEntryDescriptor() {
          return new ResultEntryDescriptor(OUTPUT, new 
DefaultMessage("simpleProcessor/result/output"), "*", true);
      }
  }
  
  
  1.1                  
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/access/Remove.java
  
  Index: Remove.java
  ===================================================================
  /*
   * $Header: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/access/Remove.java,v
 1.1 2004/06/15 16:34:20 dflorey Exp $
   * $Revision: 1.1 $
   * $Date: 2004/06/15 16:34:20 $
   *
   * ====================================================================
   *
   * Copyright 2004 The Apache Software Foundation 
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   *
   */
  
  package org.apache.slide.projector.processor.access;
  
  import org.apache.slide.projector.Context;
  import org.apache.slide.projector.Processor;
  import org.apache.slide.projector.Result;
  import org.apache.slide.projector.Store;
  import org.apache.slide.projector.descriptor.*;
  import org.apache.slide.projector.i18n.ParameterMessage;
  import org.apache.slide.projector.util.StoreHelper;
  import org.apache.slide.projector.value.StringValue;
  
  import java.util.Map;
  
  /**
   * The Event class
   * 
   * @author <a href="mailto:[EMAIL PROTECTED]">Daniel Florey</a>
   */
  public class Remove implements Processor {
      public final static String STORE = "store";
      public final static String KEY = "key";
  
      private final static ParameterDescriptor[] parameterDescriptors = new 
ParameterDescriptor[] {
          new ParameterDescriptor(STORE, new ParameterMessage("put/parameter/store"), 
new StringValueDescriptor(Store.stores), new 
StringValue(Store.stores[Store.REPOSITORY])),
          new ParameterDescriptor(KEY, new ParameterMessage("put/parameter/key"), new 
StringValueDescriptor()),
      };
      private final static ResultDescriptor resultDescriptor = new 
ResultDescriptor(new StateDescriptor[] { StateDescriptor.OK_DESCRIPTOR });
  
      public Result process(Map parameter, Context context) throws Exception {
        String storeName = parameter.get(STORE).toString();
        String key = parameter.get(KEY).toString();
        Store store = context.getStore(StoreHelper.getStoreByName(storeName));
        store.dispose(key);
        return Result.OK;
      }
  
      public ParameterDescriptor[] getParameterDescriptors() {
          return parameterDescriptors;
      }
  
      public ResultDescriptor getResultDescriptor() {
          return resultDescriptor;
      }
  }
  
  
  1.1                  
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/access/Put.java
  
  Index: Put.java
  ===================================================================
  /*
   * $Header: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/access/Put.java,v
 1.1 2004/06/15 16:34:20 dflorey Exp $
   * $Revision: 1.1 $
   * $Date: 2004/06/15 16:34:20 $
   *
   * ====================================================================
   *
   * Copyright 2004 The Apache Software Foundation 
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   *
   */
  
  package org.apache.slide.projector.processor.access;
  
  import org.apache.slide.projector.Context;
  import org.apache.slide.projector.Processor;
  import org.apache.slide.projector.Result;
  import org.apache.slide.projector.Store;
  import org.apache.slide.projector.descriptor.*;
  import org.apache.slide.projector.i18n.ParameterMessage;
  import org.apache.slide.projector.util.StoreHelper;
  import org.apache.slide.projector.value.NullValue;
  import org.apache.slide.projector.value.NumberValue;
  import org.apache.slide.projector.value.Value;
  
  import java.util.Map;
  
  /**
   * The Event class
   * 
   * @author <a href="mailto:[EMAIL PROTECTED]">Daniel Florey</a>
   */
  public class Put implements Processor {
      public final static String STORE = "store";
      public final static String KEY = "key";
      public final static String VALUE = "value";
      public final static String TIMEOUT = "timeout";
  
      private final static ParameterDescriptor[] parameterDescriptors = new 
ParameterDescriptor[] {
          new ParameterDescriptor(STORE, new ParameterMessage("put/parameter/store"), 
new StringValueDescriptor(Store.stores)),
          new ParameterDescriptor(KEY, new ParameterMessage("put/parameter/key"), new 
StringValueDescriptor()),
          new ParameterDescriptor(VALUE, new ParameterMessage("put/parameter/value"), 
new ResourceValueDescriptor()),
          new ParameterDescriptor(TIMEOUT, new 
ParameterMessage("put/parameter/timeout"), new NumberValueDescriptor(), NullValue.NULL)
      };
      private final static ResultDescriptor resultDescriptor = new 
ResultDescriptor(new StateDescriptor[] { StateDescriptor.OK_DESCRIPTOR });
  
      public Result process(Map parameter, Context context) throws Exception {
        String storeName = parameter.get(STORE).toString();
        String key = parameter.get(KEY).toString();
        Value value = (Value)parameter.get(VALUE);
        Value timeoutValue = (Value)parameter.get(TIMEOUT);
        Store store = context.getStore(StoreHelper.getStoreByName(storeName));
        if ( timeoutValue == NullValue.NULL ) {
                store.put(key, value);
        } else {
                long timeout = ((NumberValue)timeoutValue).getNumber().longValue();
                store.put(key, value, timeout);
        }
          return Result.OK;
      }
  
      public ParameterDescriptor[] getParameterDescriptors() {
          return parameterDescriptors;
      }
  
      public ResultDescriptor getResultDescriptor() {
          return resultDescriptor;
      }
  }
  
  
  
  1.3       +6 -2      
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/process/Process.java
  
  Index: Process.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/process/Process.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- Process.java      8 Jun 2004 14:43:16 -0000       1.2
  +++ Process.java      15 Jun 2004 16:34:21 -0000      1.3
  @@ -147,7 +147,11 @@
                                checkRoutings(step, processor);
                                try {
                                        stepResult = 
processor.process(processorParameters, context);
  -                                     saveResults(step, stepResult, stepStore, 
result, getResultDescriptor().getResultEntryDescriptors(), context);
  +                                     try {
  +                                             saveResults(step, stepResult, 
stepStore, result, getResultDescriptor().getResultEntryDescriptors(), context);
  +                                     } catch ( ProcessException e ) {
  +                                             throw new ProcessException(new 
ErrorMessage("saveFailed", new Object[] { step.getProcessorURI(), nextStep }), e );
  +                                     }
                                        nextStep = routeState(step, 
stepResult.getState());
                                } catch (Exception e) {
                                        nextStep = routeException(step, e);
  @@ -270,7 +274,7 @@
                return parameters;
        }
   
  -     public static void saveResults(Step step, Result stepResult, Store stepStore, 
Result result, ResultEntryDescriptor[] resultEntryDescriptors, Context context) {
  +     public static void saveResults(Step step, Result stepResult, Store stepStore, 
Result result, ResultEntryDescriptor[] resultEntryDescriptors, Context context) throws 
ProcessException {
                // save results by using result configuration
                for (Iterator i = 
step.getResultConfigurations().entrySet().iterator(); i.hasNext();) {
                        Map.Entry entry = (Map.Entry)i.next();
  
  
  
  1.2       +10 -6     
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/process/ResultConfiguration.java
  
  Index: ResultConfiguration.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/process/ResultConfiguration.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ResultConfiguration.java  8 Jun 2004 09:04:05 -0000       1.1
  +++ ResultConfiguration.java  15 Jun 2004 16:34:21 -0000      1.2
  @@ -5,6 +5,7 @@
   import org.apache.slide.projector.Result;
   import org.apache.slide.projector.Store;
   import org.apache.slide.projector.descriptor.ResultEntryDescriptor;
  +import org.apache.slide.projector.i18n.ErrorMessage;
   import org.apache.slide.projector.util.StoreHelper;
   import org.apache.slide.projector.value.MapValue;
   import org.apache.slide.projector.value.StreamableValue;
  @@ -57,8 +58,11 @@
           return name;
       }
   
  -    protected void storeValue(Value value, Store stepStore, Result result, 
ResultEntryDescriptor[] resultEntryDescriptors, Context context) {
  +    protected void storeValue(Value value, Store stepStore, Result result, 
ResultEntryDescriptor[] resultEntryDescriptors, Context context) throws 
ProcessException {
        // FIXME: Throw process exception instead of severe logging
  +     if ( value == null ) {
  +             throw new ProcessException(new ErrorMessage("valueToStoreNotFound"));
  +     }
        if (presentable ) {
               if ( value instanceof StreamableValue ) {
                   if ( context instanceof HttpContext ) {
  @@ -67,7 +71,7 @@
                       logger.log(Level.INFO, "Result can only be shown in 
http-context!");
                   }
               } else {
  -                logger.log(Level.SEVERE, "Only resources of type StreamableResource 
can be presented!");
  +                     throw new ProcessException(new 
ErrorMessage("unpresentableValue"));
               }
           }
           Store resultStore = stepStore;
  @@ -82,19 +86,19 @@
                                        resultDefined = true;
                                        break;
                                } else {
  -                        logger.log(Level.SEVERE, "Storing result with key '"+key+"' 
failed, because content type of generated result is '"+value.getContentType()+"' and 
does not match defined content type '"+resultEntryDescriptors[i].getContentType()+"'");
  +                             throw new ProcessException(new 
ErrorMessage("contentTypeMismatch", new String[] { key, value.getContentType(), 
resultEntryDescriptors[i].getContentType()}));
                                }
                        }
                }
                if ( !resultDefined ) {
  -                logger.log(Level.SEVERE, "Storing result failed, because result 
with key '"+key+"' is not defined in processor description!");
  +                     throw new ProcessException(new 
ErrorMessage("undefinedResultKey", new String[] { key }));
                }
           } else {
               if ( store != Store.NONE ) {
                resultStore = context.getStore(store);
               }
               if ( resultStore == null ) {
  -                logger.log(Level.SEVERE, "Storing result with key '"+key+"' failed, 
because store '"+Store.stores[store]+"' in not available in context '"+context+"'");
  +                     throw new ProcessException(new 
ErrorMessage("storeNotAvailable", new String[] { key, Store.stores[store] }));
               } else {
                   try {
                       String evaluatedKey = Process.evaluateKey(key, context);
  @@ -119,7 +123,7 @@
                        }
                       }
                   } catch ( IOException e ) {
  -                    logger.log(Level.SEVERE, "Storing result with key '"+key+"' 
failed!", e);
  +                     throw new ProcessException(new 
ErrorMessage("storingResultFailed"), e);
                   }
               }
           }
  
  
  
  1.3       +18 -9     
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/table/TableMapRenderer.java
  
  Index: TableMapRenderer.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/table/TableMapRenderer.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TableMapRenderer.java     1 Jun 2004 07:49:58 -0000       1.2
  +++ TableMapRenderer.java     15 Jun 2004 16:34:21 -0000      1.3
  @@ -12,6 +12,7 @@
   import org.apache.slide.projector.i18n.ErrorMessage;
   import org.apache.slide.projector.i18n.ParameterMessage;
   
  +import java.util.Iterator;
   import java.util.Map;
   import java.util.HashMap;
   
  @@ -46,7 +47,7 @@
       }
   
       public void configure(StreamableValue config) throws ConfigurationException {
  -        super.configure(config);
  +        super.configure(config); 
           ParameterDescriptor []parentParameterDescriptors = 
super.getParameterDescriptors();
           // remove fragment parameter
           parameterDescriptors = new 
ParameterDescriptor[parentParameterDescriptors.length+3];
  @@ -88,8 +89,6 @@
           if ( idResource == null) {
               tableMap = new HashMap();
               MapValue tableState = new MapValue(tableMap);
  -            tableMap.put(TableHandler.CURRENT_POSITION, offsetResource);
  -            tableMap.put(ITEMS_PER_PAGE, itemsPerPageResource);
               store.put(id, tableState);
           } else {
               tableMap = idResource.getMap();
  @@ -98,6 +97,8 @@
               NumberValue itemsPerPage = 
(NumberValue)idResource.getMap().get(ITEMS_PER_PAGE);
               if ( itemsPerPage != null ) itemsPerPageResource = itemsPerPage;
           }
  +        tableMap.put(TableHandler.CURRENT_POSITION, offsetResource);
  +        tableMap.put(ITEMS_PER_PAGE, itemsPerPageResource);
           int offset = offsetResource.getNumber().intValue();
           int length = itemsPerPageResource.getNumber().intValue();
           parameter.remove(OFFSET);
  @@ -115,16 +116,24 @@
           } else {
               if ( headerTemplate != null ) headerTemplate.evaluate(buffer, 
parameter);
               for ( int i = 0; i < length; i++ ) {
  -                Map repeatedParameter = 
((MapValue)input.getArray()[i+offset]).getMap();
  -                repeatedParameter.putAll(parameter);
  +             // Enable the use of input parameters to provide default values for 
optional row parameters
  +             Map rowParameter = new HashMap();
  +                rowParameter.putAll(parameter);
  +             Map repeatedParameter = 
((MapValue)input.getArray()[i+offset]).getMap();
  +                for ( Iterator j = repeatedParameter.entrySet().iterator(); 
j.hasNext(); ) {
  +                     Map.Entry entry = (Map.Entry)j.next();
  +                     if ( entry.getValue() != NullValue.NULL ) {
  +                             rowParameter.put(entry.getKey(), entry.getValue());
  +                     }
  +                }
                   if ( i == 0 && firstTemplate != null ) {
  -                    firstTemplate.evaluate(buffer, repeatedParameter);
  +                    firstTemplate.evaluate(buffer, rowParameter);
                   } else if ( i == length -1 && lastTemplate != null ) {
  -                    lastTemplate.evaluate(buffer, repeatedParameter);
  +                    lastTemplate.evaluate(buffer, rowParameter);
                   } else if ( evenTemplate != null && i%2 == 0 ) {
  -                    evenTemplate.evaluate(buffer, repeatedParameter);
  +                    evenTemplate.evaluate(buffer, rowParameter);
                   } else {
  -                    defaultTemplate.evaluate(buffer, repeatedParameter);
  +                    defaultTemplate.evaluate(buffer, rowParameter);
                   }
               }
               if ( footerTemplate != null ) footerTemplate.evaluate(buffer, 
parameter);
  
  
  
  1.13      +4 -1      
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/Constants.java
  
  Index: Constants.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/Constants.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- Constants.java    10 Jun 2004 16:14:12 -0000      1.12
  +++ Constants.java    15 Jun 2004 16:34:21 -0000      1.13
  @@ -35,7 +35,7 @@
       public final static int UDP = 0;
       public final static int TCP = 1;
       public final static int OFF = 2;
  -     
  +
        public final static int NOTIFICATION_METHOD = UDP;
       public final static String NOTIFICATION_HOST = "192.168.105.64";
       public final static int NOTIFICATION_PORT = 4445;
  @@ -45,12 +45,15 @@
       public final static int NOTIFICATION_DELAY = 0;
   
       public final static String DOMAIN = "/files/";
  +
       public final static String PROJECTOR_DIR = DOMAIN+"projector/";
       public final static String APPLICATIONS_DIR = PROJECTOR_DIR + "applications/";
       public final static String WORK_DIR = PROJECTOR_DIR + "work/";
        // FIXME: Use Classpath from applications
       public final static String CLASSES_DIR = PROJECTOR_DIR + "classes/";
       public final static String PROCESS_STORAGE_PREFIX = WORK_DIR + "process/";
  +     public static final String USERS_DIR = "/users/";
  +     public static final String ROLES_DIR = "/roles/";
   
       public static final URI DEFAULT_FORM_HANDLER = new URIValue("formHandler");
   }
  
  
  
  1.4       +3 -0      
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/TemplateMapRenderer.java
  
  Index: TemplateMapRenderer.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/TemplateMapRenderer.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- TemplateMapRenderer.java  1 Jun 2004 07:49:55 -0000       1.3
  +++ TemplateMapRenderer.java  15 Jun 2004 16:34:21 -0000      1.4
  @@ -8,6 +8,7 @@
   import org.apache.slide.projector.i18n.ParameterMessage;
   import org.apache.slide.projector.value.ArrayValue;
   import org.apache.slide.projector.value.MapValue;
  +import org.apache.slide.projector.value.NullValue;
   import org.apache.slide.projector.value.StreamableValue;
   import org.apache.slide.projector.value.StringValue;
   
  @@ -35,6 +36,7 @@
           List parameterDescriptorList = new ArrayList();
           for ( Iterator i = parameterDescriptions.iterator(); i.hasNext(); ) {
               ParameterDescriptor entryDescriptor = (ParameterDescriptor)i.next();
  +            // add all map parameters to optional parameters 
               if ( entryDescriptor.getName() == FRAGMENT ) {
                   parameterDescriptorList.add(entryDescriptor);
               } else {
  @@ -44,6 +46,7 @@
                           mapValueDescriptor.addEntryDescriptor(new 
ParameterDescriptor(entryDescriptor.getName(), new 
ParameterMessage("templateMapRenderer/mapEntry"), 
entryDescriptor.getValueDescriptor()));
                       } else {
                           mapValueDescriptor.addEntryDescriptor(new 
ParameterDescriptor(entryDescriptor.getName(), new 
ParameterMessage("templateMapRenderer/mapEntry"), 
entryDescriptor.getValueDescriptor(), entryDescriptor.getDefaultValue() ));
  +                        parameterDescriptorList.add(new 
ParameterDescriptor(entryDescriptor.getName(), entryDescriptor.getDescription(), 
entryDescriptor.getValueDescriptor(), NullValue.NULL));
                       }
                   } else {
                       parameterDescriptorList.add(entryDescriptor);
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to