/*
* 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 cal;

public class Entry {

  String hour;
  String description;
  String color;

  public Entry (String hour) {
    this.hour = hour;
    this.description = "";

  }

  public String getHour () {
    return this.hour;
  }

  public String getColor () {
    if (description.equals("")) return "lightblue";
    else return "red";
  }

  public String getDescription () {
    if (description.equals("")) return "None";
    else return this.description;
  }

  public void setDescription (String descr) {
    description = descr;
  }
 
}





