OSDN Git Service

original
[gb-231r1-is01/GB_2.3_IS01.git] / cts / tools / signature-tools / src / signature / io / html / ClassOverviewPage.java
diff --git a/cts/tools/signature-tools/src/signature/io/html/ClassOverviewPage.java b/cts/tools/signature-tools/src/signature/io/html/ClassOverviewPage.java
new file mode 100644 (file)
index 0000000..6951fb3
--- /dev/null
@@ -0,0 +1,205 @@
+/*
+ * 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());
+    }
+}