/*
 * Copyright 2018 Alfresco, Inc. and/or its affiliates.
 *
 * 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.activiti.api.runtime.event.impl;

import java.util.UUID;

import org.activiti.api.model.shared.event.RuntimeEvent;

public abstract class RuntimeEventImpl<ENTITY_TYPE, EVENT_TYPE extends Enum<?>> implements RuntimeEvent<ENTITY_TYPE, EVENT_TYPE> {

    private String id;
    private Long timestamp;
    private String processDefinitionId;
	private String processDefinitionKey;
	private Integer processDefinitionVersion;
    private String businessKey;
    
    private ENTITY_TYPE entity;

    public RuntimeEventImpl() {
        id = UUID.randomUUID().toString();
        timestamp = System.currentTimeMillis();
    }

    public RuntimeEventImpl(ENTITY_TYPE entity) {
        this();
        this.entity = entity;
    }

    public RuntimeEventImpl(String id,
                            Long timestamp,
                            ENTITY_TYPE entity) {
        this.id = id;
        this.timestamp = timestamp;
        this.entity = entity;
    }

    @Override
    public String getId() {
        return id;
    }

    @Override
    public ENTITY_TYPE getEntity() {
        return entity;
    }

    @Override
    public Long getTimestamp() {
        return timestamp;
    }
    
    @Override
    public String getProcessDefinitionId() {
		return processDefinitionId;
	}

    @Override
	public String getProcessDefinitionKey() {
		return processDefinitionKey;
	}

    @Override
    public Integer getProcessDefinitionVersion() {
        return processDefinitionVersion;
    }
    
    @Override
	public String getBusinessKey() {
		return businessKey;
	}
    
	public void setProcessDefinitionId(String processDefinitionId) {
		this.processDefinitionId = processDefinitionId;
	}

	public void setProcessDefinitionKey(String processDefinitionKey) {
		this.processDefinitionKey = processDefinitionKey;
	}

    public void setProcessDefinitionVersion(Integer processDefinitionVersion) {
        this.processDefinitionVersion = processDefinitionVersion;
    }
	
	public void setBusinessKey(String businessKey) {
		this.businessKey = businessKey;
	}
}

@@ -968,17 +968,20 @@
 tionId;%0A
-%09
+    
 private 
@@ -1009,17 +1009,20 @@
 ionKey;%0A
-%09
+    
 private 
@@ -1087,20 +1087,16 @@
 essKey;%0A
-    
 %0A    pri
@@ -1802,36 +1802,32 @@
 imestamp;%0A    %7D%0A
-    
 %0A    @Override%0A 
@@ -1866,26 +1866,32 @@
 itionId() %7B%0A
-%09%09
+        
 return proce
@@ -1906,17 +1906,20 @@
 tionId;%0A
-%09
+    
 %7D%0A%0A    @
@@ -1919,33 +1919,36 @@
 %0A%0A    @Override%0A
-%09
+    
 public String ge
@@ -1969,26 +1969,32 @@
 tionKey() %7B%0A
-%09%09
+        
 return proce
@@ -2006,25 +2006,28 @@
 initionKey;%0A
-%09
+    
 %7D%0A%0A    @Over
@@ -2129,20 +2129,16 @@
 ;%0A    %7D%0A
-    
 %0A    @Ov
@@ -2144,17 +2144,20 @@
 verride%0A
-%09
+    
 public S
@@ -2181,18 +2181,24 @@
 Key() %7B%0A
-%09%09
+        
 return b
@@ -2213,17 +2213,19 @@
 ey;%0A
-%09%7D
+    %7D%0A
 %0A    
-%0A%09
 publ
@@ -2281,26 +2281,32 @@
 nitionId) %7B%0A
-%09%09
+        
 this.process
@@ -2345,13 +2345,19 @@
 Id;%0A
-%09%7D%0A%0A%09
+    %7D%0A%0A    
 publ
@@ -2415,26 +2415,32 @@
 itionKey) %7B%0A
-%09%09
+        
 this.process
@@ -2477,17 +2477,20 @@
 ionKey;%0A
-%09
+    
 %7D%0A%0A    p
@@ -2640,11 +2640,13 @@
   %7D%0A
-%09%0A%09
+%0A    
 publ
@@ -2694,10 +2694,16 @@
 ) %7B%0A
-%09%09
+        
 this
@@ -2734,9 +2734,12 @@
 ey;%0A
-%09
+    
 %7D%0A%7D%0A

replace tabs with whitespace