/* * Copyright (C) 2009 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package signature.io.html; import java.util.ArrayList; import java.util.Collections; import java.util.Map; import org.antlr.stringtemplate.StringTemplate; import signature.compare.model.IAnnotationFieldDelta; import signature.compare.model.IClassDefinitionDelta; import signature.compare.model.IConstructorDelta; import signature.compare.model.IEnumConstantDelta; import signature.compare.model.IFieldDelta; import signature.compare.model.IMethodDelta; import signature.compare.model.impl.SigDelta; public class ClassOverviewPage implements IEmitter { private static final String PAGE = "ClassOverviewPage"; private final IClassDefinitionDelta classDelta; private FieldByNameComparator<IFieldDelta> fieldComparator = new FieldByNameComparator<IFieldDelta>(); private ArrayList<IFieldDelta> removedFields; private ArrayList<IFieldDelta> addedFields; private ArrayList<IFieldDelta> changedFields; private FieldByNameComparator<IAnnotationFieldDelta> annotationfieldComparator = new FieldByNameComparator<IAnnotationFieldDelta>(); private ArrayList<IAnnotationFieldDelta> removedAnnotationFields; private ArrayList<IAnnotationFieldDelta> addedAnnotationFields; private ArrayList<IAnnotationFieldDelta> changedAnnotationFields; private FieldByNameComparator<IEnumConstantDelta> enumConstantComparator = new FieldByNameComparator<IEnumConstantDelta>(); private ArrayList<IEnumConstantDelta> removedEnumConstants; private ArrayList<IEnumConstantDelta> addedEnumConstants; private ArrayList<IEnumConstantDelta> changedEnumConstants; private ExecutableMemberComparator constructorComparator = new ExecutableMemberComparator(); private ArrayList<IConstructorDelta> removedConstructors; private ArrayList<IConstructorDelta> addedConstructors; private ArrayList<IConstructorDelta> changedConstructors; private ExecutableMemberComparator methodComparator = new ExecutableMemberComparator(); private ArrayList<IMethodDelta> removedMethods; private ArrayList<IMethodDelta> addedMethods; private ArrayList<IMethodDelta> changedMethods; private final Map<String, String> commonInfos; public ClassOverviewPage(IClassDefinitionDelta classDelta, Map<String, String> commonInfos) { this.classDelta = classDelta; this.commonInfos = commonInfos; prepareData(); } private void prepareData() { if (classDelta.getFieldDeltas() != null) { prepareFieldDeltas(); } if (classDelta.getAnnotationFieldDeltas() != null) { prepareAnnotationFieldDeltas(); } if (classDelta.getEnumConstantDeltas() != null) { prepareEnumConstantDeltas(); } if (classDelta.getConstructorDeltas() != null) { prepareConstructorDeltas(); } if (classDelta.getMethodDeltas() != null) { prepareMethodDeltas(); } } private void prepareFieldDeltas() { removedFields = new ArrayList<IFieldDelta>(SigDelta .getRemoved(classDelta.getFieldDeltas())); Collections.sort(removedFields, fieldComparator); addedFields = new ArrayList<IFieldDelta>(SigDelta.getAdded(classDelta .getFieldDeltas())); Collections.sort(addedFields, fieldComparator); changedFields = new ArrayList<IFieldDelta>(SigDelta .getChanged(classDelta.getFieldDeltas())); Collections.sort(changedFields, fieldComparator); } private void prepareAnnotationFieldDeltas() { removedAnnotationFields = new ArrayList<IAnnotationFieldDelta>(SigDelta .getRemoved(classDelta.getAnnotationFieldDeltas())); Collections.sort(removedAnnotationFields, annotationfieldComparator); addedAnnotationFields = new ArrayList<IAnnotationFieldDelta>(SigDelta .getAdded(classDelta.getAnnotationFieldDeltas())); Collections.sort(addedAnnotationFields, annotationfieldComparator); changedAnnotationFields = new ArrayList<IAnnotationFieldDelta>(SigDelta .getChanged(classDelta.getAnnotationFieldDeltas())); Collections.sort(changedAnnotationFields, annotationfieldComparator); } private void prepareEnumConstantDeltas() { removedEnumConstants = new ArrayList<IEnumConstantDelta>(SigDelta .getRemoved(classDelta.getEnumConstantDeltas())); Collections.sort(removedEnumConstants, enumConstantComparator); addedEnumConstants = new ArrayList<IEnumConstantDelta>(SigDelta .getAdded(classDelta.getEnumConstantDeltas())); Collections.sort(addedEnumConstants, enumConstantComparator); changedEnumConstants = new ArrayList<IEnumConstantDelta>(SigDelta .getChanged(classDelta.getEnumConstantDeltas())); Collections.sort(changedEnumConstants, enumConstantComparator); } private void prepareConstructorDeltas() { removedConstructors = new ArrayList<IConstructorDelta>(SigDelta .getRemoved(classDelta.getConstructorDeltas())); Collections.sort(removedConstructors, constructorComparator); addedConstructors = new ArrayList<IConstructorDelta>(SigDelta .getAdded(classDelta.getConstructorDeltas())); Collections.sort(addedConstructors, constructorComparator); changedConstructors = new ArrayList<IConstructorDelta>(SigDelta .getChanged(classDelta.getConstructorDeltas())); Collections.sort(changedConstructors, constructorComparator); } private void prepareMethodDeltas() { removedMethods = new ArrayList<IMethodDelta>(SigDelta .getRemoved(classDelta.getMethodDeltas())); Collections.sort(removedMethods, methodComparator); addedMethods = new ArrayList<IMethodDelta>(SigDelta.getAdded(classDelta .getMethodDeltas())); Collections.sort(addedMethods, methodComparator); changedMethods = new ArrayList<IMethodDelta>(SigDelta .getChanged(classDelta.getMethodDeltas())); Collections.sort(changedMethods, methodComparator); } public void writeTo(StringBuilder b) { StringTemplate template = TemplateStore.getStringTemplate(PAGE); template.setAttribute("class_delta", classDelta); boolean annotationDelta = classDelta.getAnnotationDeltas() != null; boolean modifierDelta = classDelta.getModifierDeltas() != null; boolean typeVariableDelta = classDelta.getTypeVariableDeltas() != null; boolean superClassDelta = classDelta.getSuperClassDelta() != null; boolean interfaceDelta = classDelta.getInterfaceDeltas() != null; boolean hasSignatureDelta = annotationDelta || modifierDelta || typeVariableDelta || superClassDelta || interfaceDelta; template.setAttribute("has_class_signature_delta", hasSignatureDelta); template.setAttribute("removed_fields", removedFields); template.setAttribute("added_fields", addedFields); template.setAttribute("changed_fields", changedFields); template.setAttribute("removed_annotation_fields", removedAnnotationFields); template.setAttribute("added_annotation_fields", addedAnnotationFields); template.setAttribute("changed_annotation_fields", changedAnnotationFields); template.setAttribute("removed_enum_constants", removedEnumConstants); template.setAttribute("added_enum_constants", addedEnumConstants); template.setAttribute("changed_enum_constants", changedEnumConstants); template.setAttribute("removed_constructors", removedConstructors); template.setAttribute("added_constructors", addedConstructors); template.setAttribute("changed_constructors", changedConstructors); template.setAttribute("removed_methods", removedMethods); template.setAttribute("added_methods", addedMethods); template.setAttribute("changed_methods", changedMethods); template.setArgumentContext(commonInfos); b.append(template.toString()); } }