diff -r a151135b0cf9 -r aa2539c91954 tracesrv/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/RulesEngineModelListener.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tracesrv/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/RulesEngineModelListener.java Fri Oct 08 14:56:39 2010 +0300 @@ -0,0 +1,119 @@ +/* +* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +* Trace model listener +* +*/ +package com.nokia.tracecompiler.engine.rules; + +import com.nokia.tracecompiler.model.Trace; +import com.nokia.tracecompiler.model.TraceCompilerException; +import com.nokia.tracecompiler.model.TraceModelListener; +import com.nokia.tracecompiler.model.TraceObject; +import com.nokia.tracecompiler.model.TraceParameter; +import com.nokia.tracecompiler.rules.FillerParameterRule; + +/** + * Trace model listener + * + */ +final class RulesEngineModelListener implements TraceModelListener { + + /** + * Rules engine + */ + private final RulesEngine engine; + + /** + * Constructor + * + * @param engine + * rules engine + */ + RulesEngineModelListener(RulesEngine engine) { + this.engine = engine; + } + + /* + * (non-Javadoc) + * + * @see com.nokia.tracecompiler.model.TraceModelListener# + * objectAdded(com.nokia.tracecompiler.model.TraceObject, + * com.nokia.tracecompiler.model.TraceObject) + */ + public void objectAdded(TraceObject owner, TraceObject object) { + // Updated in objectCreationComplete + } + + + /* (non-Javadoc) + * @see com.nokia.tracecompiler.model.TraceModelListener#objectRemoved(com.nokia.tracecompiler.model.TraceObject, com.nokia.tracecompiler.model.TraceObject) + */ + public void objectRemoved(TraceObject owner, TraceObject object) throws TraceCompilerException { + if (owner instanceof Trace && object instanceof TraceParameter) { + engine.checkParameterTypes((Trace) owner); + if (object.getExtension(FillerParameterRule.class) == null) { + engine.checkFillerParameters((Trace) owner); + } + } + } + + /* + * (non-Javadoc) + * + * @see com.nokia.tracecompiler.model.TraceModelListener# + * propertyUpdated(com.nokia.tracecompiler.model.TraceObject, int) + */ + public void propertyUpdated(TraceObject object, int property) throws TraceCompilerException { + if (object.getModel().isValid() && object.isComplete() + && object instanceof TraceParameter + && property == TraceModelListener.TYPE) { + Trace owner = ((TraceParameter) object).getTrace(); + if (owner.isComplete()) { + engine.checkParameterTypes(owner); + engine.checkFillerParameters(owner); + } + } + } + + /* + * (non-Javadoc) + * + * @see com.nokia.tracecompiler.model.TraceModelListener# + * objectCreationComplete(com.nokia.tracecompiler.model.TraceObject) + */ + public void objectCreationComplete(TraceObject object) throws TraceCompilerException { + if (object.getModel().isValid()) { + if (object instanceof TraceParameter) { + Trace owner = ((TraceParameter) object).getTrace(); + if (owner.isComplete()) { + engine.checkParameterTypes(owner); + // When adding fillers, the check is not done + if (object.getExtension(FillerParameterRule.class) == null) { + engine.checkFillerParameters(owner); + } + } + } else if (object instanceof Trace) { + // When a trace with multiple parameters is created, the + // above branch does not get entered since the trace is not + // yet complete. Check is made after trace is complete + if (((Trace) object).getParameterCount() > 0) { + engine.checkParameterTypes((Trace) object); + engine.checkFillerParameters((Trace) object); + } + } + } + } +} \ No newline at end of file