
/*
 * 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.ode.daohib.bpel.hobj;

import java.sql.Timestamp;


/**
 * Row representation of a BPEL event. 
 *
 * @hibernate.class table="BPEL_EVENT"
 * @hibernate.query name="SELECT_EVENT_IDS_BY_INSTANCES" query="select id from HBpelEvent as e where e.instance in (:instances)"
 */
public class HBpelEvent extends HObject {
    public static final String SELECT_EVENT_IDS_BY_INSTANCES = "SELECT_EVENT_IDS_BY_INSTANCES";

    private Timestamp _tstamp;
    private String _type;
    private String _detail;

    private HProcess _process;
    private HProcessInstance _instance;
    private byte[] _data;

    /** Scope identifier, possibly null. */
    private Long _scopeId;

    /**
     * @hibernate.many-to-one column="IID" foreign-key="none"
     */
    public HProcessInstance getInstance() {
        return _instance;
    }

    public void setInstance(HProcessInstance instance) {
        _instance = instance;
    }

    /**
     * @hibernate.many-to-one column="PID" foreign-key="none"
     */
    public HProcess getProcess() {
        return _process;
    }

    public void setProcess(HProcess process) {
        _process = process;
    }

    /**
     * @hibernate.property
     *        column="TSTAMP"
     */
    public Timestamp getTstamp() {
        return _tstamp;
    }

    public void setTstamp(Timestamp tstamp) {
        _tstamp = tstamp;
    }

    /**
     * @hibernate.property
     *        column="TYPE"
     */
    public String getType() {
        return _type;
    }

    public void setType(String type) {
        _type = type;
    }

    /**
     * TODO Check 32000 is enough for details
     */
    /**
     * @hibernate.property
     *    column="DETAIL"
     *    type="text"
     *    length="32000"
     */
    public String getDetail() {
        return _detail;
    }

    public void setDetail(String detail) {
        _detail = detail;
    }


    /**
     * @hibernate.property type="org.apache.ode.daohib.bpel.hobj.GZipDataType"
     *
     * @hibernate.column name="DATA" sql-type="blob(2G)"
     */
    public byte[] getData() {
        return _data;
    }

    public void setData(byte[] data) {
        _data = data;
    }

    /**
     * Get the scope identifier of the scope associated with this event. 
     * Note, that this is not implemented as a many-to-one relationship
     * because when scopes are deleted from the database we do not want 
     * their events to suffer the same fate. 
     * @hibernate.property
     *        column="SID"
     */
    public Long getScopeId() {
        return _scopeId;
    }

    public void setScopeId(Long scopeId) {
        _scopeId = scopeId;
    }
}
