/**
* Copyright 2004-2016 Riccardo Solmi. All rights reserved.
* This file is part of the Whole Platform.
*
* The Whole Platform is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* The Whole Platform is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with the Whole Platform. If not, see <http://www.gnu.org/licenses/>.
*/
package org.whole.gen.lang.visitors;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.jdt.core.dom.CompilationUnit;
import org.whole.gen.lang.LanguageGenerator;
import org.whole.gen.lang.builders.BuilderInterfaceBuilder;
import org.whole.gen.lang.builders.GenericBuilderAdapterBuilder;
import org.whole.gen.lang.builders.SpecificBuilderAdapterBuilder;
import org.whole.lang.model.AbstractEntity;
import org.whole.lang.reflect.EntityDescriptor;
import org.whole.lang.util.StringUtils;
/**
* @author Riccardo Solmi
*/
public class VisitorsBuilder extends AbstractEntity {
private List<AbstractVisitorCompilationUnitBuilder> visitors = new ArrayList<AbstractVisitorCompilationUnitBuilder>();
private VisitorInterfaceBuilder visitorInterfaceBuilder;
public VisitorsBuilder(LanguageGenerator generator) {
visitors.add(visitorInterfaceBuilder = new VisitorInterfaceBuilder(
generator));
visitors.add(new FailureVisitorBuilder(generator));
visitors.add(new IdentityVisitorBuilder(generator));
visitors.add(new IdentityUnaryVisitorBuilder(generator));
visitors.add(new IdentityDefaultVisitorBuilder(generator));
visitors.add(new IdentitySwitchVisitorBuilder(generator));
visitors.add(new ForwardStagedVisitorBuilder(generator));
visitors.add(new ForwardGenericVisitorBuilder(generator));
visitors.add(new ForwardStrategyVisitorBuilder(generator));
visitors.add(new SequenceVisitorBuilder(generator));
visitors.add(new TraverseAllVisitorBuilder(generator));
visitors.add(new TraverseAllChildrenVisitorBuilder(generator));
visitors.add(new TraverseAllAdjacentsVisitorBuilder(generator));
visitors.add(new TraverseAllSwitchVisitorBuilder(generator));
visitors.add(new BuilderInterfaceBuilder(generator));
// visitors.add(new IdentityBuilderContextBuilder(generator));
visitors.add(new GenericBuilderAdapterBuilder(generator));
visitors.add(new SpecificBuilderAdapterBuilder(generator));
// visitors.add(new CodebaseBuilderBuilder(generator));
}
public CompilationUnit getVisitorInterface() {
return visitorInterfaceBuilder.getCompilationUnit();
}
public void addType(String eName, String eType) {
Iterator i = visitors.iterator();
while (i.hasNext())
((AbstractVisitorCompilationUnitBuilder) i.next()).addType(eName,
eType);
}
public void addSimpleEntity(String name) {
Iterator i = visitors.iterator();
while (i.hasNext())
((AbstractVisitorCompilationUnitBuilder) i.next())
.addSimpleEntity(name);
}
public void addCompositeEntity(String name, String componentType, boolean isOrdered, boolean isByReference) {
Iterator i = visitors.iterator();
while (i.hasNext())
((AbstractVisitorCompilationUnitBuilder) i.next())
.addCompositeEntity(name, componentType, isOrdered, isByReference);
}
public void addMapEntity(String name, String keyType, String valueType) {
Iterator i = visitors.iterator();
while (i.hasNext())
((AbstractVisitorCompilationUnitBuilder) i.next()).addMapEntity(
name, keyType, valueType);
}
public void addFragmentEntity(String name) {
Iterator i = visitors.iterator();
while (i.hasNext())
((AbstractVisitorCompilationUnitBuilder) i.next())
.addFragmentEntity(name);
}
public void addPrimitiveEntity(String name) {
Iterator i = visitors.iterator();
while (i.hasNext())
((AbstractVisitorCompilationUnitBuilder) i.next())
.addPrimitiveEntity(name);
}
public void addEnumEntity(String eName, String fType, String fName) {
Iterator i = visitors.iterator();
while (i.hasNext())
((AbstractVisitorCompilationUnitBuilder) i.next())
.addEnumEntity(eName, fType, fName);
}
public void addResolverEntity(String name) {
Iterator i = visitors.iterator();
while (i.hasNext())
((AbstractVisitorCompilationUnitBuilder) i.next())
.addResolverEntity(name);
}
public void addFeature(String eName, String fType, String fName, String name, boolean isByReference) {
if (StringUtils.isPrimitiveOrString(fType))
addPrimitiveFeature(eName, fType, fName);
else
addStructuralFeature(eName, fType, fName, name, isByReference);
}
public void addStructuralFeature(String eName, String fType, String fName, String name, boolean isByReference) {
Iterator i = visitors.iterator();
while (i.hasNext())
((AbstractVisitorCompilationUnitBuilder) i.next())
.addStructuralFeature(eName, fType, fName, name, isByReference);
}
public void addPrimitiveFeature(String eName, String fType, String fName) {
Iterator i = visitors.iterator();
while (i.hasNext())
((AbstractVisitorCompilationUnitBuilder) i.next())
.addPrimitiveFeature(eName, fType, fName);
}
@Override
public EntityDescriptor<?> wGetEntityDescriptor() {
throw new UnsupportedOperationException();
}
}