/*
* Copyright (c) 2005, 2007 Borland Software Corporation
*
* 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:
* Radek Dvorak (Borland) - initial API and implementation
* Artem Tikhomirov (Borland) - GenAuditRoot introduced, GenAuditContainers flattened
*/
package org.eclipse.gmf.tests.gen;
import java.util.List;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.emf.codegen.ecore.genmodel.GenPackage;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.gmf.codegen.gmfgen.GMFGenFactory;
import org.eclipse.gmf.codegen.gmfgen.GenAuditContainer;
import org.eclipse.gmf.codegen.gmfgen.GenAuditRoot;
import org.eclipse.gmf.codegen.gmfgen.GenAuditRule;
import org.eclipse.gmf.codegen.gmfgen.GenAuditable;
import org.eclipse.gmf.codegen.gmfgen.GenDiagramElementTarget;
import org.eclipse.gmf.codegen.gmfgen.GenDomainElementTarget;
import org.eclipse.gmf.codegen.gmfgen.GenNotationElementTarget;
import org.eclipse.gmf.codegen.gmfgen.GenRuleTarget;
import org.eclipse.gmf.tests.ConfiguredTestCase;
import org.eclipse.jdt.core.JavaConventions;
import org.eclipse.jdt.core.JavaCore;
/**
* Tests hancoded method in model for audit rule definitions
*/
public class AuditHandcodedTest extends ConfiguredTestCase {
private final String javaLevel = JavaCore.VERSION_1_4;
private GenAuditRoot root;
private GenAuditContainer topCat;
private GenAuditContainer child1;
private GenAuditContainer child2;
private GenAuditRule rule0;
private GenAuditRule rule1;
private GenAuditRule rule2;
public AuditHandcodedTest(String name) {
super(name);
}
protected void setUp() throws Exception {
super.setUp();
root = GMFGenFactory.eINSTANCE.createGenAuditRoot();
root.getCategories().add(topCat = GMFGenFactory.eINSTANCE.createGenAuditContainer());
topCat.getPath().add(topCat);
root.getRules().add(rule0 = GMFGenFactory.eINSTANCE.createGenAuditRule());
rule0.setCategory(topCat);
root.getCategories().add(child1 = GMFGenFactory.eINSTANCE.createGenAuditContainer());
child1.getPath().add(topCat);
child1.getPath().add(child1);
root.getRules().add(rule1 = GMFGenFactory.eINSTANCE.createGenAuditRule());
rule1.setCategory(child1);
root.getCategories().add(child2 = GMFGenFactory.eINSTANCE.createGenAuditContainer());
child2.getPath().add(topCat);
child2.getPath().add(child1);
child2.getPath().add(child2);
root.getRules().add(rule2 = GMFGenFactory.eINSTANCE.createGenAuditRule());
rule2.setCategory(child2);
}
public void testRulesToContextMap() {
// setup different kinds of targets and assign to audits
GenDiagramElementTarget diagramElementTarget1 = GMFGenFactory.eINSTANCE.createGenDiagramElementTarget();
diagramElementTarget1.getElement().add(getSetup().getGenModel().getNodeA());
GenDiagramElementTarget diagramElementTarget2 = GMFGenFactory.eINSTANCE.createGenDiagramElementTarget();
diagramElementTarget2.getElement().add(getSetup().getGenModel().getLinkC());
GenDomainElementTarget domainElementTarget = GMFGenFactory.eINSTANCE.createGenDomainElementTarget();
domainElementTarget.setElement(getSetup().getGenModel().getNodeA().getDomainMetaClass());
GenNotationElementTarget notationElementTarget = GMFGenFactory.eINSTANCE.createGenNotationElementTarget();
notationElementTarget.setElement(getSetup().getGenModel().getLinkC().getDiagramRunTimeClass());
GenRuleTarget targets[] = new GenRuleTarget[] {
diagramElementTarget1, diagramElementTarget2, domainElementTarget, notationElementTarget
};
final int expectedCtxCount = targets.length - 1; // domain and notation share default context
// ensure sufficient number of audits to be distributed accross contexts
final int minOfAuditsInCtx = 2;
final int numberOfAuditsToAdd = expectedCtxCount * minOfAuditsInCtx - root.getRules().size();
for(int i = 0; i < numberOfAuditsToAdd; i++) {
GenAuditRule r;
root.getRules().add(r = GMFGenFactory.eINSTANCE.createGenAuditRule());
r.setCategory(topCat);
}
int i = 0;
for (GenAuditRule audit : root.getRules()) {
audit.setTarget((GenAuditable)EcoreUtil.copy(targets[i%targets.length]));
// IStatus s = JavaConventions.validateIdentifier(audit.getTarget().getCgetContextSelectorLocalClassName(), javaLevel, javaLevel);
// assertTrue("Context selectorClassLocalName must valid java name", s.getSeverity() != IStatus.ERROR); //$NON-NLS-1$
// String ctxID = audit.getTarget().getClientContextID();
// s = JavaConventions.validateIdentifier(ctxID, javaLevel, javaLevel);
// assertTrue("Context ID must be a valid java identifier", s.getSeverity() != IStatus.ERROR); //$NON-NLS-1$
i++;
}
assertTargetedModels(targets);
}
public void testModelConstraintAdapters() throws Exception {
int i = 1;
for (GenAuditRule nextAudit : root.getRules()) {
assertEquals("Adapter" + i, nextAudit.getConstraintAdapterLocalClassName()); //$NON-NLS-1$
i++;
}
}
private void assertTargetedModels(GenRuleTarget[] targets) {
List<GenPackage> packageList = root.getTargetedModelPackages();
assertFalse(packageList.isEmpty());
for (int i = 0; i < targets.length; i++) {
assertTrue("Package must be found targeted packages", //$NON-NLS-1$
packageList.contains(targets[i].getContext().getGenPackage()));
}
}
}