/* * Copyright (c) 2012 Sam Harwell, Tunnel Vision Laboratories LLC * All rights reserved. * * The source code of this document is proprietary work, and is not licensed for * distribution. For information about licensing, contact Sam Harwell at: * sam@tunnelvisionlabs.com */ package org.tvl.goworks.editor.go.codemodel.formatters; import org.tvl.goworks.editor.go.codemodel.CodeElementModel; import org.tvl.goworks.editor.go.codemodel.ConstModel; import org.tvl.goworks.editor.go.codemodel.FieldModel; import org.tvl.goworks.editor.go.codemodel.FileModel; import org.tvl.goworks.editor.go.codemodel.FunctionModel; import org.tvl.goworks.editor.go.codemodel.ImportDeclarationModel; import org.tvl.goworks.editor.go.codemodel.InterfaceModel; import org.tvl.goworks.editor.go.codemodel.PackageDeclarationModel; import org.tvl.goworks.editor.go.codemodel.PackageModel; import org.tvl.goworks.editor.go.codemodel.ParameterModel; import org.tvl.goworks.editor.go.codemodel.StructModel; import org.tvl.goworks.editor.go.codemodel.TypeAliasModel; import org.tvl.goworks.editor.go.codemodel.TypeArrayModel; import org.tvl.goworks.editor.go.codemodel.TypeChannelModel; import org.tvl.goworks.editor.go.codemodel.TypeFunctionModel; import org.tvl.goworks.editor.go.codemodel.TypeIntrinsicModel; import org.tvl.goworks.editor.go.codemodel.TypeMapModel; import org.tvl.goworks.editor.go.codemodel.TypeModel; import org.tvl.goworks.editor.go.codemodel.TypePointerModel; import org.tvl.goworks.editor.go.codemodel.TypeReferenceModel; import org.tvl.goworks.editor.go.codemodel.TypeSliceModel; import org.tvl.goworks.editor.go.codemodel.VarModel; /** * * @author Sam Harwell */ public abstract class AbstractCodeModelFormatter implements CodeModelFormatter { @Override public String format(CodeElementModel model) { if (model instanceof FileModel) { return formatFileModel((FileModel)model); } else if (model instanceof PackageModel) { return formatPackageModel((PackageModel)model); } else if (model instanceof ImportDeclarationModel) { return formatImportDeclarationModel((ImportDeclarationModel)model); } else if (model instanceof PackageDeclarationModel) { return formatPackageDeclarationModel((PackageDeclarationModel)model); } else if (model instanceof TypeModel) { if (model instanceof InterfaceModel) { return formatInterfaceModel((InterfaceModel)model); } else if (model instanceof StructModel) { return formatStructModel((StructModel)model); } else if (model instanceof TypeAliasModel) { return formatTypeAliasModel((TypeAliasModel)model); } else if (model instanceof TypeFunctionModel) { return formatTypeFunctionModel((TypeFunctionModel)model); } else if (model instanceof TypeIntrinsicModel) { return formatTypeIntrinsicModel((TypeIntrinsicModel)model); } else if (model instanceof TypeMapModel) { return formatTypeMapModel((TypeMapModel)model); } else if (model instanceof TypeReferenceModel) { return formatTypeReferenceModel((TypeReferenceModel)model); } else if (model instanceof TypeArrayModel) { return formatTypeArrayModel((TypeArrayModel)model); } else if (model instanceof TypeChannelModel) { return formatTypeChannelModel((TypeChannelModel)model); } else if (model instanceof TypePointerModel) { return formatTypePointerModel((TypePointerModel)model); } else if (model instanceof TypeSliceModel) { return formatTypeSliceModel((TypeSliceModel)model); } else { throw new UnsupportedOperationException("Unrecognized CodeElementModel implementation"); } } else if (model instanceof FunctionModel) { return formatFunctionModel((FunctionModel)model); } else if (model instanceof VarModel) { if (model instanceof FieldModel) { return formatFieldModel((FieldModel)model); } else if (model instanceof ParameterModel) { return formatParameterModel((ParameterModel)model); } else { return formatVarModel((VarModel)model); } } else if (model instanceof ConstModel) { return formatConstModel((ConstModel)model); } else { throw new UnsupportedOperationException("Unrecognized CodeElementModel implementation"); } } protected abstract String formatConstModel(ConstModel model); protected abstract String formatFieldModel(FieldModel model); protected abstract String formatFileModel(FileModel model); protected abstract String formatFunctionModel(FunctionModel model); protected abstract String formatImportDeclarationModel(ImportDeclarationModel model); protected abstract String formatInterfaceModel(InterfaceModel model); protected abstract String formatPackageDeclarationModel(PackageDeclarationModel model); protected abstract String formatPackageModel(PackageModel model); protected abstract String formatParameterModel(ParameterModel model); protected abstract String formatStructModel(StructModel model); protected abstract String formatTypeAliasModel(TypeAliasModel model); protected abstract String formatTypeArrayModel(TypeArrayModel model); protected abstract String formatTypeChannelModel(TypeChannelModel model); protected abstract String formatTypeFunctionModel(TypeFunctionModel model); protected abstract String formatTypeIntrinsicModel(TypeIntrinsicModel model); protected abstract String formatTypeMapModel(TypeMapModel model); protected abstract String formatTypePointerModel(TypePointerModel model); protected abstract String formatTypeReferenceModel(TypeReferenceModel model); protected abstract String formatTypeSliceModel(TypeSliceModel model); protected abstract String formatVarModel(VarModel model); }