blob: ac997456ec800cb2ad1b472df0495f296b92d4c9 [file] [log] [blame]
/*****************************************************************************
* Copyright (c) 2017 CEA LIST.
*
*
* 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:
*
* Mauricio Alferez (mauricio.alferez@cea.fr) CEA LIST - Initial API and implementation
*
*****************************************************************************/
package org.eclipse.papyrus.requirements.sysml14.visitor;
import java.util.Iterator;
import org.eclipse.emf.common.util.TreeIterator;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.papyrus.requirements.sysml14.boilerplateText.If;
import org.eclipse.papyrus.requirements.sysml14.boilerplateText.Model;
import org.eclipse.papyrus.requirements.sysml14.boilerplateText.Predicate;
import org.eclipse.papyrus.requirements.sysml14.boilerplateText.Prefix;
import org.eclipse.papyrus.requirements.sysml14.boilerplateText.Requirement;
import org.eclipse.papyrus.requirements.sysml14.boilerplateText.Shall;
import org.eclipse.papyrus.requirements.sysml14.boilerplateText.ShallAllow;
import org.eclipse.papyrus.requirements.sysml14.boilerplateText.ShallNot;
import org.eclipse.papyrus.requirements.sysml14.boilerplateText.ShallNotAllow;
import org.eclipse.papyrus.requirements.sysml14.boilerplateText.Subject;
import org.eclipse.papyrus.requirements.sysml14.boilerplateText.While;
import org.eclipse.papyrus.requirements.sysml14.boilerplateText.util.BoilerplateTextSwitch;
public class RequirementsPrinter extends BoilerplateTextSwitch<Object> implements BoilerplateTextKeywords {
StringBuffer sb = new StringBuffer();
@Override
public String caseRequirement(Requirement object) {
return "";
}
@Override
public String casePrefix(Prefix object) {
return "";
}
@Override
public String caseIf(If object) {
StringBuffer sb = new StringBuffer();
Iterator<String> it = object.getEvent().iterator();
sb.append(IF);
if (it.hasNext()) {
sb.append(Quote(it.next()));
}
while (it.hasNext()) {
sb.append(AND + Quote(it.next()));
}
return sb.toString() + END_OF_CONDITIONAL_CLAUSE;
}
@Override
public String caseWhile(While object) {
return WHILE + Quote(object.getState()) + END_OF_CONDITIONAL_CLAUSE;
}
@Override
public String caseSubject(Subject object) {
return Quote(object.getSystem());
}
@Override
public String casePredicate(Predicate object) {
return "";
}
@Override
public String caseShallNotAllow(ShallNotAllow object) {
StringBuffer sb = new StringBuffer();
sb.append(SHALLNOTALLOW);
if (null != object.getAction()) {
sb.append(Quote(object.getAction()));
}
if (null != object.getEntity()) {
sb.append(Quote(object.getEntity()) + TO + Quote(object.getActionPerformedByEntity()));
}
return sb.toString();
}
@Override
public String caseShallAllow(ShallAllow object) {
StringBuffer sb = new StringBuffer();
sb.append(SHALLALLOW);
if (null != object.getAction()) {
sb.append(Quote(object.getAction()));
}
if (null != object.getEntity()) {
sb.append(Quote(object.getEntity()) + TO + Quote(object.getActionPerformedByEntity()));
}
return sb.toString();
}
@Override
public String caseShallNot(ShallNot object) {
return SHALLNOT + Quote(object.getAction());
}
@Override
public String caseShall(Shall object) {
return SHALL + Quote(object.getAction());
}
@Override
public String defaultCase(EObject object) {
return "";
}
public String print(Model xtextModel) {
TreeIterator<Object> it = EcoreUtil.getAllProperContents(xtextModel, false);
while (it.hasNext()) {
EObject token = (EObject) it.next();
sb.append(this.doSwitch(token));
}
return this.sb.toString();
}
public static String Quote(String str) {
return QUOTE + str + QUOTE;
}
}