| /** |
| * |
| * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) |
| * |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation |
| * |
| */ |
| package org.eclipse.osbp.vaaclipse.addons.softwarefactory.bpmImpl; |
| |
| import java.io.ByteArrayOutputStream; |
| import java.io.ObjectOutput; |
| import java.io.ObjectOutputStream; |
| import java.util.HashMap; |
| import java.util.Map; |
| |
| import org.eclipse.osbp.dsl.common.datatypes.IDto; |
| import org.jbpm.task.query.TaskSummary; |
| import org.slf4j.Logger; |
| import org.slf4j.LoggerFactory; |
| |
| public class BPMTaskVariablesCache { |
| |
| private static Logger log = LoggerFactory.getLogger(BPMTaskVariablesCache.class); |
| private final Map<Long,Map<String, Object>> cache; |
| |
| protected BPMTaskVariablesCache() { |
| cache = new HashMap<Long, Map<String,Object>>(); |
| } |
| |
| protected void clear(long taskId) { |
| log.debug("clear for task:"+taskId); |
| cache.remove(taskId); |
| } |
| |
| protected boolean contains(Object taskInformationObject) { |
| return cache.containsKey(getProcessInstanceId(taskInformationObject)); |
| } |
| |
| protected Map<String,Object> initialize(Object taskInformationObject, Map<String, Object> source) { |
| Map<String,Object> variables = new HashMap<String, Object>(); |
| long taskId = getProcessInstanceId(taskInformationObject); |
| log.debug("init for task:"+taskId); |
| if (source != null) { |
| variables.putAll(source); |
| } |
| cache.put(taskId, variables); |
| return variables; |
| } |
| |
| protected Map<String,Object> getVariables(Object taskInformationObject) { |
| long taskId = getProcessInstanceId(taskInformationObject); |
| log.debug("got for task:"+taskId); |
| return cache.get(taskId); |
| } |
| |
| protected Object getVariable(Object taskInformationObject, String variable) { |
| long taskId = getProcessInstanceId(taskInformationObject); |
| log.debug("got for task:"+taskId+" variable:"+variable); |
| Object value = cache.get(taskId).get(variable); |
| // if (value instanceof IDto) { |
| // ticket576_testSerializeObject((IDto) value); |
| // } |
| return value; |
| } |
| |
| protected void setVariable(Object taskInformationObject, String variable, Object value) { |
| // if (value instanceof IDto) { |
| // ticket576_testSerializeObject((IDto) value); |
| // } |
| long taskId = getProcessInstanceId(taskInformationObject); |
| log.debug("set for task:"+taskId+" variable:"+variable); |
| getVariables(taskInformationObject).put(variable, value); |
| } |
| |
| protected static long getProcessInstanceId(Object taskInformationObject) { |
| if (taskInformationObject instanceof Long) { |
| return (Long) taskInformationObject; |
| } |
| else if (taskInformationObject instanceof Integer) { |
| return (Integer) taskInformationObject; |
| } |
| else if (taskInformationObject instanceof TaskSummary) { |
| return ((TaskSummary) taskInformationObject).getProcessInstanceId(); |
| } |
| return 0; |
| } |
| |
| // protected static void ticket576_testSerializeObject(Object object) { |
| // if (object != null) { |
| // ByteArrayOutputStream bos = new ByteArrayOutputStream(); |
| // ObjectOutput out = null; |
| // try { |
| // out = new ObjectOutputStream(bos); |
| // out.writeObject(object); |
| // out.flush(); |
| // } |
| // catch (Exception et) { |
| // log.error("ticket576_testSerializeDto("+object.getClass().getCanonicalName()+")", et); |
| // } |
| // finally { |
| // try { |
| // bos.close(); |
| // } |
| // catch (Exception et) { |
| // log.error("ticket576_testSerializeDto("+object.getClass().getCanonicalName()+")", et); |
| // } |
| // } |
| // } |
| // } |
| } |