package org.activiti.crystalball.simulator; /* 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. */ import org.springframework.beans.factory.FactoryBean; import java.util.Date; import java.util.Map; /** * * @author martin.grofcik */ public class SimulationEvent { /** event type used to notify AcquireJobsRunnable monitor to continue in execution */ public static final String TYPE_ACQUIRE_JOB_NOTIFICATION_EVENT = "ACQUIRE_JOB_NOTIFICATION_EVENT"; public static final String TYPE_END_SIMULATION = "END_SIMULATION"; public static final String TYPE_BREAK_SIMULATION = "BREAK"; public static final int PRIORITY_SYSTEM = -1; private final long simulationTime; private final String type; private final Map<String, Object> properties; private final Object property; private final int priority; protected SimulationEvent(Builder builder) { this.simulationTime = builder.simulationTime; this.type = builder.type; this.properties = builder.properties; this.property = builder.property; this.priority = builder.priority; } public Object getProperty() { return property; } public Object getProperty(String name) { return properties.get(name); } public long getSimulationTime() { return simulationTime; } public String getType() { return type; } public int getPriority() { return priority; } @Override public String toString() { String date = hasSimulationTime() ? (new Date(simulationTime)).toString() + ", " : "now "; return date + type + ", "+priority+", " +property + ", " + properties; } public Map<String, Object> getProperties() { return properties; } public boolean hasSimulationTime() { return this.simulationTime != Long.MIN_VALUE; } public static class Builder { // required private long simulationTime; private String type; // optional private Map<String, Object> properties; private Object property; private int priority; public Builder(String type) { this.type = type; this.simulationTime = Long.MIN_VALUE; } public Builder simulationTime(long simulationTime) { this.simulationTime=simulationTime; return this; } public Builder properties(Map<String, Object> properties) { this.properties = properties; return this; } public Builder property(Object property) { this.property = property; return this; } public Builder priority(int priority) { this.priority = priority; return this; } public SimulationEvent build() { return new SimulationEvent(this); } } public static class Factory implements FactoryBean<SimulationEvent> { private long simulationTime; private String type; private Map<String, Object> properties; private int priority; public Factory(String type, long simulationTime, Map<String, Object> properties) { this.type = type; this.simulationTime = simulationTime; this.properties = properties; } @Override public SimulationEvent getObject() throws Exception { return new Builder(this.type). simulationTime(this.simulationTime). properties(this.properties). priority(this.priority). build(); } @Override public Class<?> getObjectType() { return SimulationEvent.class; } @Override public boolean isSingleton() { return false; } } }