/******************************************************************************* * 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 com.db4o.activation.ActivationPurpose; import com.db4o.activation.Activator; import com.db4o.query.Query; import com.db4o.ta.Activatable; import com.subgraph.vega.api.model.conditions.IHttpCondition; import com.subgraph.vega.api.model.conditions.match.IHttpConditionIntegerMatchAction; import com.subgraph.vega.api.model.conditions.match.IHttpConditionMatchAction; import com.subgraph.vega.api.model.conditions.match.IHttpConditionRangeMatchAction; import com.subgraph.vega.api.model.conditions.match.IHttpConditionStringMatchAction; import com.subgraph.vega.internal.model.conditions.match.IHttpConditionMatchActionEx; public abstract class AbstractCondition implements IHttpCondition, Activatable { protected IHttpConditionMatchActionEx matchAction; private boolean isEnabled; protected AbstractCondition(IHttpConditionMatchAction matchAction) { this.matchAction = (IHttpConditionMatchActionEx) matchAction; this.isEnabled = true; } @Override public IHttpConditionMatchAction getMatchAction() { activate(ActivationPurpose.READ); return matchAction; } @Override public void setMatchAction(IHttpConditionMatchAction matchAction) { activate(ActivationPurpose.WRITE); if(matchAction instanceof IHttpConditionMatchActionEx) this.matchAction = (IHttpConditionMatchActionEx) matchAction; } @Override public boolean isEnabled() { activate(ActivationPurpose.READ); return isEnabled; } @Override public void setEnabled(boolean state) { activate(ActivationPurpose.WRITE); isEnabled = state; } public IHttpCondition createCopy() { activate(ActivationPurpose.READ); return getType().createConditionInstance(matchAction.createCopy()); } protected boolean matchesString(String value) { activate(ActivationPurpose.READ); if(matchAction instanceof IHttpConditionStringMatchAction) { return ((IHttpConditionStringMatchAction) matchAction).matchesValue(value); } throw new IllegalStateException("Expecting an IHttpConditionStringMatchingAction, got"+ matchAction); } protected boolean matchesInteger(int value) { activate(ActivationPurpose.READ); if(matchAction instanceof IHttpConditionIntegerMatchAction) { return ((IHttpConditionIntegerMatchAction) matchAction).matchesValue(value); } else if(matchAction instanceof IHttpConditionRangeMatchAction) { return ((IHttpConditionRangeMatchAction) matchAction).matchesValue(value); } throw new IllegalStateException("Expecting an IHttpConditonIntegerMatchAction or IHttpConditionRangeMatchAction, got"+ matchAction); } protected void constrainQuery(Query query) { activate(ActivationPurpose.READ); matchAction.constrainQuery(query); } public String getValueString() { activate(ActivationPurpose.READ); return matchAction.toString(); } public abstract void filterRequestLogQuery(Query query); private transient Activator activator; @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; } }