/*******************************************************************************
* Copyright (c) 2011 Subgraph.
* 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:
* Subgraph - initial API and implementation
******************************************************************************/
package com.subgraph.vega.internal.model.conditions;
import java.util.Map;
import com.db4o.activation.ActivationPurpose;
import com.db4o.activation.Activator;
import com.db4o.collections.ActivatableHashMap;
import com.db4o.ta.Activatable;
import com.subgraph.vega.api.model.conditions.IHttpConditionSet;
public class HttpConditionSetMap implements Activatable {
private final Map<String, IHttpConditionSet> conditionSetMap = new ActivatableHashMap<String, IHttpConditionSet>();
private transient Activator activator;
private transient HttpConditionManager conditionManager;
public HttpConditionSetMap(HttpConditionManager conditionManager) {
this.conditionManager = conditionManager;
}
void setConditionManager(HttpConditionManager conditionManager) {
this.conditionManager = conditionManager;
}
IHttpConditionSet getConditionSet(String name) {
activate(ActivationPurpose.READ);
synchronized(conditionSetMap) {
if(!conditionSetMap.containsKey(name))
conditionSetMap.put(name, new HttpConditionSet(name, conditionManager));
return conditionSetMap.get(name);
}
}
IHttpConditionSet getConditionSetCopy(String name) {
activate(ActivationPurpose.READ);
synchronized(conditionSetMap) {
return new HttpConditionSet(name, conditionManager, conditionSetMap.get(name));
}
}
void saveConditionSet(String name, IHttpConditionSet conditionSet) {
activate(ActivationPurpose.READ);
synchronized (conditionSet) {
conditionSetMap.put(name, conditionSet);
}
}
@Override
public void activate(ActivationPurpose activationPurpose) {
if(activator != null) {
activator.activate(activationPurpose);
}
}
@Override
public void bind(Activator activator) {
if(this.activator == activator) {
return;
}
if(activator != null && this.activator != null) {
throw new IllegalStateException("Object can only be bound to one activator");
}
this.activator = activator;
}
}