/**

 *  Copyright (C) 2010 Cloud.com, Inc.  All rights reserved.
 * 
 * This software is licensed under the GNU General Public License v3 or later.
 * 
 * It is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or any later version.
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 * 
 */
package com.cloud.event;

import java.util.Date;

import com.cloud.acl.ControlledEntity;

public interface Event extends ControlledEntity{
    public enum State {
        Created,
        Scheduled,
        Started,
        Completed;
    }
    

    long getId();
    String getType();
    State getState();

    String getDescription();
    Date getCreateDate();
    long getUserId();
    long getAccountId();
    long getDomainId();
    int getTotalSize();
    String getLevel();
    long getStartId();
    String getParameters();
}
