/*******************************************************************************
 * Copyright (c) 2012, 2018 E.D. Willink and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v2.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v20.html
 *
 * Contributors:
 *   E.D. Willink - Initial API and implementation
 *******************************************************************************/
package org.eclipse.qvtd.pivot.qvtschedule.utilities;

import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.ocl.pivot.util.Visitable;
import org.eclipse.ocl.pivot.utilities.Nameable;
import org.eclipse.ocl.pivot.utilities.ToStringVisitor;
import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbaseToStringVisitor;
import org.eclipse.qvtd.pivot.qvtschedule.AbstractDatum;
import org.eclipse.qvtd.pivot.qvtschedule.ArgumentEdge;
import org.eclipse.qvtd.pivot.qvtschedule.BasicPartition;
import org.eclipse.qvtd.pivot.qvtschedule.BooleanLiteralNode;
import org.eclipse.qvtd.pivot.qvtschedule.CastEdge;
import org.eclipse.qvtd.pivot.qvtschedule.ClassDatum;
import org.eclipse.qvtd.pivot.qvtschedule.Cluster;
import org.eclipse.qvtd.pivot.qvtschedule.CollectionClassDatum;
import org.eclipse.qvtd.pivot.qvtschedule.CollectionLiteralNode;
import org.eclipse.qvtd.pivot.qvtschedule.CollectionPartEdge;
import org.eclipse.qvtd.pivot.qvtschedule.CollectionRangeNode;
import org.eclipse.qvtd.pivot.qvtschedule.ComposedNode;
import org.eclipse.qvtd.pivot.qvtschedule.CompositePartition;
import org.eclipse.qvtd.pivot.qvtschedule.Connection;
import org.eclipse.qvtd.pivot.qvtschedule.CyclicMappingRegion;
import org.eclipse.qvtd.pivot.qvtschedule.CyclicPartition;
import org.eclipse.qvtd.pivot.qvtschedule.DependencyEdge;
import org.eclipse.qvtd.pivot.qvtschedule.DependencyNode;
import org.eclipse.qvtd.pivot.qvtschedule.DispatchRegion;
import org.eclipse.qvtd.pivot.qvtschedule.Edge;
import org.eclipse.qvtd.pivot.qvtschedule.EdgeConnection;
import org.eclipse.qvtd.pivot.qvtschedule.EnumLiteralNode;
import org.eclipse.qvtd.pivot.qvtschedule.ErrorNode;
import org.eclipse.qvtd.pivot.qvtschedule.ExpressionEdge;
import org.eclipse.qvtd.pivot.qvtschedule.IfNode;
import org.eclipse.qvtd.pivot.qvtschedule.IncludesEdge;
import org.eclipse.qvtd.pivot.qvtschedule.InputNode;
import org.eclipse.qvtd.pivot.qvtschedule.IteratedEdge;
import org.eclipse.qvtd.pivot.qvtschedule.IteratorNode;
import org.eclipse.qvtd.pivot.qvtschedule.KeyPartEdge;
import org.eclipse.qvtd.pivot.qvtschedule.KeyedValueNode;
import org.eclipse.qvtd.pivot.qvtschedule.LoadingPartition;
import org.eclipse.qvtd.pivot.qvtschedule.LoadingRegion;
import org.eclipse.qvtd.pivot.qvtschedule.MapLiteralNode;
import org.eclipse.qvtd.pivot.qvtschedule.MapPartEdge;
import org.eclipse.qvtd.pivot.qvtschedule.MapPartNode;
import org.eclipse.qvtd.pivot.qvtschedule.MappingNode;
import org.eclipse.qvtd.pivot.qvtschedule.MappingPartition;
import org.eclipse.qvtd.pivot.qvtschedule.MappingRegion;
import org.eclipse.qvtd.pivot.qvtschedule.MergedPartition;
import org.eclipse.qvtd.pivot.qvtschedule.NavigableEdge;
import org.eclipse.qvtd.pivot.qvtschedule.NavigationEdge;
import org.eclipse.qvtd.pivot.qvtschedule.Node;
import org.eclipse.qvtd.pivot.qvtschedule.NodeConnection;
import org.eclipse.qvtd.pivot.qvtschedule.NonPartition;
import org.eclipse.qvtd.pivot.qvtschedule.NullLiteralNode;
import org.eclipse.qvtd.pivot.qvtschedule.NumericLiteralNode;
import org.eclipse.qvtd.pivot.qvtschedule.OperationCallNode;
import org.eclipse.qvtd.pivot.qvtschedule.OperationNode;
import org.eclipse.qvtd.pivot.qvtschedule.OperationParameterEdge;
import org.eclipse.qvtd.pivot.qvtschedule.OperationRegion;
import org.eclipse.qvtd.pivot.qvtschedule.OperationSelfEdge;
import org.eclipse.qvtd.pivot.qvtschedule.Partition;
import org.eclipse.qvtd.pivot.qvtschedule.PatternTypedNode;
import org.eclipse.qvtd.pivot.qvtschedule.PatternVariableNode;
import org.eclipse.qvtd.pivot.qvtschedule.PredicateEdge;
import org.eclipse.qvtd.pivot.qvtschedule.PropertyDatum;
import org.eclipse.qvtd.pivot.qvtschedule.QVTschedulePackage;
import org.eclipse.qvtd.pivot.qvtschedule.RecursionEdge;
import org.eclipse.qvtd.pivot.qvtschedule.Region;
import org.eclipse.qvtd.pivot.qvtschedule.RootPartition;
import org.eclipse.qvtd.pivot.qvtschedule.RuleRegion;
import org.eclipse.qvtd.pivot.qvtschedule.ScheduleModel;
import org.eclipse.qvtd.pivot.qvtschedule.RootRegion;
import org.eclipse.qvtd.pivot.qvtschedule.ShadowNode;
import org.eclipse.qvtd.pivot.qvtschedule.ShadowPartEdge;
import org.eclipse.qvtd.pivot.qvtschedule.SharedEdge;
import org.eclipse.qvtd.pivot.qvtschedule.StringLiteralNode;
import org.eclipse.qvtd.pivot.qvtschedule.SuccessEdge;
import org.eclipse.qvtd.pivot.qvtschedule.SuccessNode;
import org.eclipse.qvtd.pivot.qvtschedule.TupleLiteralNode;
import org.eclipse.qvtd.pivot.qvtschedule.TuplePartEdge;
import org.eclipse.qvtd.pivot.qvtschedule.TypeLiteralNode;
import org.eclipse.qvtd.pivot.qvtschedule.UnknownNode;
import org.eclipse.qvtd.pivot.qvtschedule.VariableNode;
import org.eclipse.qvtd.pivot.qvtschedule.VerdictRegion;
import org.eclipse.qvtd.pivot.qvtschedule.util.QVTscheduleVisitor;

/**
 * Converts an OCL expression to a string for debugging. This is not intended to
 * be used by client applications as an AST-to-text transformation.
 */
public class QVTscheduleToStringVisitor extends QVTbaseToStringVisitor implements QVTscheduleVisitor<String>
{
	protected static class QVTscheduleToStringFactory implements QVTbaseToStringVisitor.Factory
	{
		protected QVTscheduleToStringFactory() {
			ToStringVisitor.addFactory(this);
			QVTbaseToStringVisitor.FACTORY.getClass();
		}

		@Override
		public @NonNull ToStringVisitor createToStringVisitor(@NonNull StringBuilder s) {
			return new QVTscheduleToStringVisitor(s);
		}

		@Override
		public @NonNull EPackage getEPackage() {
			QVTschedulePackage eInstance = QVTschedulePackage.eINSTANCE;
			assert eInstance != null;
			return eInstance;
		}
	}

	public static ToStringVisitor.@NonNull Factory FACTORY = new QVTscheduleToStringFactory();

	public QVTscheduleToStringVisitor(@NonNull StringBuilder s) {
		super(s);
	}

	@Override
	public String visiting(@NonNull Visitable object) {
		if (object instanceof EObject) {
			append(((EObject)object).eClass().getName());
		}
		else {
			append(object.getClass().getSimpleName());
		}
		append(" ");
		if (object instanceof Nameable) {
			appendName((Nameable) object);
		}
		return null;
	}

	@Override
	public String visitAbstractDatum(@NonNull AbstractDatum object) {
		return visiting(object);
	}

	@Override
	public String visitArgumentEdge(@NonNull ArgumentEdge object) {
		return visiting(object);
	}

	@Override
	public String visitBasicPartition(@NonNull BasicPartition object) {
		return visiting(object);
	}

	@Override
	public String visitBooleanLiteralNode(@NonNull BooleanLiteralNode object) {
		return visiting(object);
	}

	@Override
	public String visitCastEdge(@NonNull CastEdge object) {
		return visiting(object);
	}

	@Override
	public String visitClassDatum(@NonNull ClassDatum object) {
		return visiting(object);
	}

	@Override
	public String visitCluster(@NonNull Cluster object) {
		return visiting(object);
	}

	@Override
	public String visitCollectionClassDatum(@NonNull CollectionClassDatum object) {
		return visiting(object);
	}

	@Override
	public String visitCollectionLiteralNode(@NonNull CollectionLiteralNode object) {
		return visiting(object);
	}

	@Override
	public String visitCollectionPartEdge(@NonNull CollectionPartEdge object) {
		return visiting(object);
	}

	@Override
	public String visitCollectionRangeNode(@NonNull CollectionRangeNode object) {
		return visiting(object);
	}

	@Override
	public String visitComposedNode(@NonNull ComposedNode object) {
		return visiting(object);
	}

	@Override
	public String visitCompositePartition(@NonNull CompositePartition object) {
		return visiting(object);
	}

	@Override
	public String visitConnection(@NonNull Connection object) {
		return visiting(object);
	}

	@Override
	public String visitCyclicMappingRegion(@NonNull CyclicMappingRegion object) {
		return visiting(object);
	}

	@Override
	public String visitCyclicPartition(@NonNull CyclicPartition object) {
		return visiting(object);
	}

	@Override
	public String visitDependencyEdge(@NonNull DependencyEdge object) {
		return visiting(object);
	}

	@Override
	public String visitDependencyNode(@NonNull DependencyNode object) {
		return visiting(object);
	}

	@Override
	public String visitDispatchRegion(@NonNull DispatchRegion object) {
		return visiting(object);
	}

	@Override
	public String visitEdge(@NonNull Edge object) {
		return visiting(object);
	}

	@Override
	public String visitEdgeConnection(@NonNull EdgeConnection object) {
		return visiting(object);
	}

	@Override
	public String visitEnumLiteralNode(@NonNull EnumLiteralNode object) {
		return visiting(object);
	}

	@Override
	public String visitErrorNode(@NonNull ErrorNode object) {
		return visiting(object);
	}

	@Override
	public String visitExpressionEdge(@NonNull ExpressionEdge object) {
		return visiting(object);
	}

	@Override
	public String visitIfNode(@NonNull IfNode object) {
		return visiting(object);
	}

	@Override
	public String visitIncludesEdge(@NonNull IncludesEdge object) {
		return visiting(object);
	}

	@Override
	public String visitInputNode(@NonNull InputNode object) {
		return visiting(object);
	}

	@Override
	public String visitIteratedEdge(@NonNull IteratedEdge object) {
		return visiting(object);
	}

	@Override
	public String visitIteratorNode(@NonNull IteratorNode object) {
		return visiting(object);
	}

	@Override
	public String visitKeyPartEdge(@NonNull KeyPartEdge object) {
		return visiting(object);
	}

	@Override
	public String visitKeyedValueNode(@NonNull KeyedValueNode object) {
		return visiting(object);
	}

	@Override
	public String visitLoadingPartition(@NonNull LoadingPartition object) {
		return visiting(object);
	}

	@Override
	public String visitLoadingRegion(@NonNull LoadingRegion object) {
		return visiting(object);
	}

	@Override
	public String visitMapLiteralNode(@NonNull MapLiteralNode object) {
		return visiting(object);
	}

	@Override
	public String visitMapPartEdge(@NonNull MapPartEdge object) {
		return visiting(object);
	}

	@Override
	public String visitMapPartNode(@NonNull MapPartNode object) {
		return visiting(object);
	}

	@Override
	public String visitMappingNode(@NonNull MappingNode object) {
		return visiting(object);
	}

	@Override
	public String visitMappingPartition(@NonNull MappingPartition object) {
		return visiting(object);
	}

	@Override
	public String visitMappingRegion(@NonNull MappingRegion object) {
		return visiting(object);
	}

	@Override
	public String visitMergedPartition(@NonNull MergedPartition object) {
		return visiting(object);
	}

	@Override
	public String visitNavigableEdge(@NonNull NavigableEdge object) {
		return visiting(object);
	}

	@Override
	public String visitNavigationEdge(@NonNull NavigationEdge object) {
		return visiting(object);
	}

	@Override
	public String visitNode(@NonNull Node object) {
		return visiting(object);
	}

	@Override
	public String visitNodeConnection(@NonNull NodeConnection object) {
		return visiting(object);
	}

	@Override
	public String visitNonPartition(@NonNull NonPartition object) {
		return visiting(object);
	}

	@Override
	public String visitNullLiteralNode(@NonNull NullLiteralNode object) {
		return visiting(object);
	}

	@Override
	public String visitNumericLiteralNode(@NonNull NumericLiteralNode object) {
		return visiting(object);
	}

	@Override
	public String visitOperationCallNode(@NonNull OperationCallNode object) {
		return visiting(object);
	}

	@Override
	public String visitOperationNode(@NonNull OperationNode object) {
		return visiting(object);
	}

	@Override
	public String visitOperationParameterEdge(@NonNull OperationParameterEdge object) {
		return visiting(object);
	}

	@Override
	public String visitOperationRegion(@NonNull OperationRegion object) {
		return visiting(object);
	}

	@Override
	public String visitOperationSelfEdge(@NonNull OperationSelfEdge object) {
		return visiting(object);
	}

	@Override
	public String visitPartition(@NonNull Partition object) {
		return visiting(object);
	}

	@Override
	public String visitPatternTypedNode(@NonNull PatternTypedNode object) {
		return visiting(object);
	}

	@Override
	public String visitPatternVariableNode(@NonNull PatternVariableNode object) {
		return visiting(object);
	}

	@Override
	public String visitPredicateEdge(@NonNull PredicateEdge object) {
		return visiting(object);
	}

	@Override
	public String visitPropertyDatum(@NonNull PropertyDatum object) {
		return visiting(object);
	}

	@Override
	public String visitRecursionEdge(@NonNull RecursionEdge object) {
		return visiting(object);
	}

	@Override
	public String visitRegion(@NonNull Region object) {
		return visiting(object);
	}

	@Override
	public String visitRootPartition(@NonNull RootPartition object) {
		return visiting(object);
	}

	@Override
	public String visitRootRegion(@NonNull RootRegion object) {
		return visiting(object);
	}

	@Override
	public String visitRuleRegion(@NonNull RuleRegion object) {
		return visiting(object);
	}

	@Override
	public String visitScheduleModel(@NonNull ScheduleModel object) {
		return visiting(object);
	}

	@Override
	public String visitShadowNode(@NonNull ShadowNode object) {
		return visiting(object);
	}

	@Override
	public String visitShadowPartEdge(@NonNull ShadowPartEdge object) {
		return visiting(object);
	}

	@Override
	public String visitSharedEdge(@NonNull SharedEdge object) {
		return visiting(object);
	}

	@Override
	public String visitStringLiteralNode(@NonNull StringLiteralNode object) {
		return visiting(object);
	}

	@Override
	public String visitSuccessEdge(@NonNull SuccessEdge object) {
		return visiting(object);
	}

	@Override
	public String visitSuccessNode(@NonNull SuccessNode object) {
		return visiting(object);
	}

	@Override
	public String visitTupleLiteralNode(@NonNull TupleLiteralNode object) {
		return visiting(object);
	}

	@Override
	public String visitTuplePartEdge(@NonNull TuplePartEdge object) {
		return visiting(object);
	}

	@Override
	public String visitTypeLiteralNode(@NonNull TypeLiteralNode object) {
		return visiting(object);
	}

	@Override
	public String visitUnknownNode(@NonNull UnknownNode object) {
		return visiting(object);
	}

	@Override
	public String visitVariableNode(@NonNull VariableNode object) {
		return visiting(object);
	}

	@Override
	public String visitVerdictRegion(@NonNull VerdictRegion object) {
		return visiting(object);
	}
}
