Skip to content

Commit

Permalink
Support class level events
Browse files Browse the repository at this point in the history
  • Loading branch information
winfoozmnayef committed Nov 27, 2018
1 parent 8d8bd4a commit edf8c61
Show file tree
Hide file tree
Showing 12 changed files with 82 additions and 45 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,16 @@
* @author Mohamed Hamdan
*/
@Keep
@Analytics
@Analytics(events = {
@Data(value = @Value("post.title"), key = @Key("title")),
@Data(value = @Value("post.body"), key = @Key("body"))
})
public interface JavaMainActivityAnalytics {

@Keep
@CallSuccess(value = "posts", name = "requestSuccess")
@Event(
value = "Success get posts",
timestamp = true,
events = {
@Data(value = @Value("post.title"), key = @Key("title"))
}
Expand All @@ -34,13 +36,11 @@ public interface JavaMainActivityAnalytics {

@Keep
@CallFailure(value = "posts", name = "requestFailed")
@Event(
value = "Failed get posts",
timestamp = true,
events = {
@Data(value = @Value("post.title"), key = @Key("title")),
@Data(value = @Value("post.body"), key = @Key("body"))
}
)
@Event(value = "Failed get posts", timestamp = true)
void failedGetPosts(Post post);

@Keep
@CallFailure(value = "posts", name = "requestFailed")
@Event(value = "Failed get posts1", timestamp = true)
void failed1GetPosts(Post post);
}
2 changes: 1 addition & 1 deletion winanalytics-annotations/gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ POM_DESCRIPTION=Annotations for use in your project
POM_BINTRAY_NAME=com.winfooz:annotations
POM_ARTIFACT_ID=winanalytics-annotations
POM_PACKAGING=jar
POM_VERSION=1.0.1-RC
POM_VERSION=1.0.3-RC
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,6 @@ package com.winfooz
@Retention(AnnotationRetention.SOURCE)
@Target(AnnotationTarget.CLASS)
@MustBeDocumented
annotation class Analytics
annotation class Analytics(
val events: Array<Data> = []
)
2 changes: 1 addition & 1 deletion winanalytics-compiler/gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ POM_DESCRIPTION=For process annotations and generate code
POM_BINTRAY_NAME=com.winfooz:compiler
POM_ARTIFACT_ID=winanalytics-compiler
POM_PACKAGING=jar
POM_VERSION=1.0.1-RC
POM_VERSION=1.0.3-RC
12 changes: 8 additions & 4 deletions winanalytics-compiler/src/main/java/com/winfooz/JavaProcessor.kt
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import com.winfooz.elements.EventElement
import com.winfooz.elements.EventWithClickElement
import com.winfooz.elements.ScreenElement
import java.io.IOException
import java.util.*
import javax.annotation.processing.Filer
import javax.lang.model.element.Modifier
import javax.lang.model.element.PackageElement
Expand Down Expand Up @@ -71,7 +70,7 @@ class JavaProcessor(
.addSuperinterface(ClassName.get(element.pkgName, element.className))
.addModifiers(Modifier.PUBLIC, Modifier.FINAL)
element.events.forEach { it ->
val method = generateAnalyticsMethod(it)
val method = generateAnalyticsMethod(it, element)
method?.let {
implClass.addMethod(it)
}
Expand All @@ -85,7 +84,7 @@ class JavaProcessor(
}
}

private fun generateAnalyticsMethod(event: EventElement): MethodSpec? {
private fun generateAnalyticsMethod(event: EventElement, element: AnalyticsElement): MethodSpec? {
return try {
val method = MethodSpec.overriding(event.element)
method.addStatement(
Expand All @@ -99,7 +98,12 @@ class JavaProcessor(
event.eventName,
HASH_MAP_CLASS_NAME
)
event.data.forEach {
val date = if (event.data.isNotEmpty()) {
event.data
} else {
element.data
}
date.forEach {
method.addStatement(
"\$N.put(\$S, \$N)",
"pair.second",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,9 +103,9 @@ class WinAnalyticsProcessor : AbstractProcessor() {
try {
val kotlinMetadata = it.getAnnotation(KOTLIN_META_DATA_CLASS)
if (kotlinMetadata != null) {
kotlinAnalyticsElements.add(AnalyticsElement(messager, elementUtils, it))
kotlinAnalyticsElements.add(AnalyticsElement(it.getAnnotation(Analytics::class.java), messager, elementUtils, it))
} else {
javaAnalyticsElements.add(AnalyticsElement(messager, elementUtils, it))
javaAnalyticsElements.add(AnalyticsElement(it.getAnnotation(Analytics::class.java), messager, elementUtils, it))
}
} catch (e: Exception) {
messager.printMessage(Diagnostic.Kind.ERROR, e.message, it)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.winfooz.elements

import com.winfooz.Analytics
import com.winfooz.CallFailure
import com.winfooz.CallSuccess
import com.winfooz.Event
Expand All @@ -21,6 +22,7 @@ import javax.tools.Diagnostic
* @author Mohamed Hamdan
*/
class AnalyticsElement(
val analytics: Analytics,
private val messager: Messager,
private val elementUtils: Elements,
private val element: Element
Expand All @@ -37,10 +39,12 @@ class AnalyticsElement(
val events: MutableSet<EventElement> by lazy { mutableSetOf<EventElement>() }
val successes: MutableSet<CallSuccessElement> by lazy { mutableSetOf<CallSuccessElement>() }
val failures: MutableSet<CallFailureElement> by lazy { mutableSetOf<CallFailureElement>() }
var data: MutableList<DataElement> = mutableListOf()

init {
validate()
parseEvents()
parseDataAnnotations()
}

private fun parseEvents() {
Expand Down Expand Up @@ -72,6 +76,12 @@ class AnalyticsElement(
}
}

private fun parseDataAnnotations() {
analytics.events.forEach {
data.add(DataElement(it, messager, element))
}
}

private fun validate() {
if (element.kind != ElementKind.INTERFACE) {
messager.printMessage(Diagnostic.Kind.ERROR, "Must be interface", element)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@ package com.winfooz.elements

import com.winfooz.Data
import javax.annotation.processing.Messager
import javax.lang.model.element.ExecutableElement
import javax.lang.model.element.Element
import javax.lang.model.element.TypeElement
import javax.lang.model.element.VariableElement
import javax.tools.Diagnostic

Expand All @@ -14,9 +15,9 @@ import javax.tools.Diagnostic
*/
class DataElement(
private val data: Data,
private val parameters: List<VariableElement>,
private val messager: Messager,
private val element: ExecutableElement
private val element: Element,
private val parameters: List<VariableElement> = mutableListOf()
) {

var name: String = ""
Expand All @@ -38,28 +39,32 @@ class DataElement(
}

private fun validateValue(value: String) {
if (!value.contains(".")) {
if (!parameters.map { it.simpleName.toString() }.contains(value)) {
messager.printMessage(Diagnostic.Kind.ERROR, "Cannot find $value parameter in ${element.enclosingElement.simpleName}.${element.simpleName}", element)
if (element !is TypeElement) {
if (!value.contains(".")) {
if (!parameters.map { it.simpleName.toString() }.contains(value)) {
messager.printMessage(Diagnostic.Kind.ERROR, "Cannot find $value parameter in ${element.enclosingElement.simpleName}.${element.simpleName}", element)
}
reference = value
kotlinReference = value
return
}
reference = value
kotlinReference = value
return
}
var valid = false
parameters.forEach {
if (value.split(".")[0] == it.simpleName.toString()) {
reference = validateReference(value)
valid = true
var valid = false
parameters.forEach {
if (value.split(".")[0] == it.simpleName.toString()) {
reference = getReference(value)
valid = true
}
}
}
if (!valid) {
messager.printMessage(Diagnostic.Kind.ERROR, "${element.simpleName} there is no ${value.substring(0, value.indexOf("."))} parameter", element)
return
if (!valid) {
messager.printMessage(Diagnostic.Kind.ERROR, "${element.simpleName} there is no ${value.substring(0, value.indexOf("."))} parameter", element)
return
}
} else {
reference = getReference(value)
}
}

private fun validateReference(reference: String): String {
private fun getReference(reference: String): String {
val references = reference.split(".")
var newReference = references[0]
kotlinReference = references[0]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ class EventElement(
}
event.events.isNotEmpty() -> {
event.events.forEach {
data.add(DataElement(it, parameters, messager, element))
data.add(DataElement(it, messager, element, parameters))
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion winanalytics-okhttp/gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ POM_DESCRIPTION=For support auto events when http request failed or success
POM_BINTRAY_NAME=com.winfooz:okhttp
POM_ARTIFACT_ID=winanalytics-okhttp
POM_PACKAGING=jar
POM_VERSION=1.0.1-RC
POM_VERSION=1.0.3-RC
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.winfooz;

import android.os.Handler;
import android.support.annotation.NonNull;
import java.io.IOException;
import okhttp3.Interceptor;
Expand All @@ -12,7 +13,10 @@
*/
public class AnalyticsInterceptor implements Interceptor {

private static final int DELAYED = 2000;

private String baseUrl;
private Handler handler = new Handler();

public AnalyticsInterceptor(String baseUrl) {
this.baseUrl = baseUrl;
Expand All @@ -24,13 +28,25 @@ public Response intercept(@NonNull Chain chain) throws IOException {
try {
Response response = chain.proceed(chain.request());
if (response.isSuccessful()) {
WinAnalytics.getInstance().logSuccess(baseUrl, chain.request().url().toString());
handler.postDelayed(
() ->
WinAnalytics.getInstance()
.logSuccess(baseUrl, chain.request().url().toString()),
DELAYED);
} else {
WinAnalytics.getInstance().logFailure(baseUrl, chain.request().url().toString());
handler.postDelayed(
() ->
WinAnalytics.getInstance()
.logFailure(baseUrl, chain.request().url().toString()),
DELAYED);
}
return response;
} catch (IOException e) {
WinAnalytics.getInstance().logFailure(baseUrl, chain.request().url().toString());
handler.postDelayed(
() ->
WinAnalytics.getInstance()
.logFailure(baseUrl, chain.request().url().toString()),
DELAYED);
throw e;
}
}
Expand Down
2 changes: 1 addition & 1 deletion winanalytics/gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ POM_DESCRIPTION=For log analytics to firebase,fabric,mixpanel etc...
POM_BINTRAY_NAME=com.winfooz:winanalytics
POM_ARTIFACT_ID=winanalytics
POM_PACKAGING=jar
POM_VERSION=1.0.1-RC
POM_VERSION=1.0.3-RC

0 comments on commit edf8c61

Please sign in to comment.