blob: c2daf730a17bb53c1a645bddacda7392eac4a1ea [file] [log] [blame]
/*
* Copyright (c) 2005, 2009 Sven Efftinge and others.
* 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:
* Sven Efftinge - Initial API and implementation
* Artem Tikhomirov (Borland) - Migration to OCL expressions
*/
package org.eclipse.gmf.internal.xpand.ast;
import java.util.Set;
import org.eclipse.gmf.internal.xpand.model.AnalysationIssue;
import org.eclipse.gmf.internal.xpand.model.EvaluationException;
import org.eclipse.gmf.internal.xpand.model.ExecutionContext;
import org.eclipse.gmf.internal.xpand.ocl.ExpressionHelper;
import org.eclipse.ocl.cst.OCLExpressionCS;
/**
* @author Sven Efftinge
*/
public class ProtectStatement extends Statement {
private final ExpressionHelper commentStart;
private final ExpressionHelper commentEnd;
private final Statement[] body;
private final ExpressionHelper id;
private final boolean disable;
public ProtectStatement(final int start, final int end, final int line, final OCLExpressionCS commentStart,
final OCLExpressionCS commentEnd, final Statement[] body, final OCLExpressionCS id, final boolean disable) {
super(start, end, line);
this.commentStart = new ExpressionHelper(commentStart, this);
this.commentEnd = new ExpressionHelper(commentEnd, this);
this.body = body;
this.id = new ExpressionHelper(id, this);
this.disable = disable;
}
public void analyze(final ExecutionContext ctx, final Set<AnalysationIssue> issues) {
commentStart.analyze(ctx, issues);
commentEnd.analyze(ctx, issues);
id.analyze(ctx, issues);
for (int i = 0; i < body.length; i++) {
body[i].analyze(ctx, issues);
}
}
@Override
public void evaluateInternal(final ExecutionContext ctx) {
// FIXME REVISIT!!!
final String cStart = nullSave(commentStart.evaluate(ctx));
if (cStart == null) {
// Never will be here
throw new EvaluationException("NullEvaluation!", commentStart);
}
final String cEnd = nullSave(commentEnd.evaluate(ctx));
if (cEnd == null) {
// Never will be here
throw new EvaluationException("NullEvaluation!", commentEnd);
}
final String idv = nullSave(id.evaluate(ctx));
if (idv == null) {
// Never will be here
throw new EvaluationException("NullEvaluation!", id);
}
// ProtectedRegion region = null;
// if (ctx.getProtectedRegionResolver() != null) {
// region = ctx.getProtectedRegionResolver().getProtectedRegion(idv);
// } else {
// throw new RuntimeException("No protected region resolver configured!");
// }
//
// if (region == null) {
// region = ctx.getProtectedRegionResolver().createProtectedRegion(idv, disable);
// ctx.getOutput().write(region.getStartString(cStart, cEnd));
// for (int i = 0; i < body.length; i++) {
// body[i].evaluate(ctx);
// }
// ctx.getOutput().write(region.getEndString(cStart, cEnd));
// } else {
// ctx.getOutput().write(region.getStartString(cStart, cEnd));
// try {
// ctx.getOutput().write(region.getBody(cStart, cEnd));
// } catch (final ProtectedRegionSyntaxException e) {
// throw new EvaluationException(e.getMessage(), this, id.getCST());
// }
// ctx.getOutput().write(region.getEndString(cStart, cEnd));
// }
}
// FIXME STUPID CODE?! never returns null while each use of the method checks for null
private String nullSave(final Object string) {
return string != null ? string.toString() : "";
}
ExpressionHelper getCommentStart() {
return commentStart;
}
ExpressionHelper getCommentEnd() {
return commentEnd;
}
ExpressionHelper getId() {
return id;
}
Statement[] getBody() {
return body;
}
}