/*  Licensed to the Apache Software Foundation (ASF) under one
 *  or more contributor license agreements.  See the NOTICE file
 *  distributed with this work for additional information
 *  regarding copyright ownership.  The ASF licenses this file
 *  to you 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.portals.samples;

import javax.portlet.annotations.PortletRequestScoped;

/**
 * Requestscoped bean to mark if timout occurs.
 * 
 * @author Scott Nicklous
 */
@PortletRequestScoped
public class APComplete {

   private boolean complete = false;
   
   public APComplete() {
   }

   /**
    * @return the complete
    */
   public boolean isComplete() {
      return complete;
   }

   /**
    * @param complete the complete to set
    */
   public void setComplete(boolean complete) {
      this.complete = complete;
   }

}
