All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.imqa.injector.DependencyInjector Maven / Gradle / Ivy

There is a newer version: 2.25.11
Show newest version
package io.imqa.injector;


import org.gradle.api.Project;
import org.gradle.api.artifacts.dsl.DependencyHandler; 
import org.gradle.api.artifacts.Dependency;
import org.gradle.api.artifacts.DependencySet;
import org.gradle.api.artifacts.Configuration;
import org.gradle.api.artifacts.ConfigurationContainer;
import org.gradle.api.artifacts.DependencyResolutionListener;
import org.gradle.api.artifacts.ResolvableDependencies;

import io.imqa.IMQAPlugin;
import io.imqa.injector.format.Version;
import io.imqa.injector.util.Logger;
import io.imqa.injector.util.BuildOption;

import java.util.Set;
import java.util.HashSet;
import java.lang.Iterable;
import java.util.Iterator;

public class DependencyInjector {

	public static final String CONF_IMQA_SDK = "imqa";
	DependencySet compileDeps;
	private static final String IMQA_GROUP_NAME = "io.imqa";
	private static final String MPM_SDK_NAME = "imqa-mpm-client";
	private static final String CRASH_SDK_NAME = "imqa-crash-client";
	private static final String CORE_SDK_NAME = "imqa-core";
	private String MPM_SDK_INFO_FOR_DEPENDENCY = "";
	private String CRASH_SDK_INFO_FOR_DEPENDENCY = "";
	private String CORE_SDK_INFO_FOR_DEPENDENCY = "";

	public DependencyInjector() {

		// TODO local.properties 에서 가져올 것
		MPM_SDK_INFO_FOR_DEPENDENCY += IMQA_GROUP_NAME +":"+ MPM_SDK_NAME +":"+ "2.19.0";
		CRASH_SDK_INFO_FOR_DEPENDENCY += IMQA_GROUP_NAME +":"+ CRASH_SDK_NAME +":"+ "2.19.0";
		CORE_SDK_INFO_FOR_DEPENDENCY += IMQA_GROUP_NAME +":"+ CORE_SDK_NAME +":"+ "2.19.0";
	}

	public void doInject(Project project) {

		Logger.d("Target Projects", "project : "+project.getName());
		Logger.d("IMQA Options", "imqaMpm : "+BuildOption.imqaMpm);
		Logger.d("IMQA Options", "imqaCrash : "+BuildOption.imqaCrash);
		Logger.d("IMQA Options", "imqaCore : "+BuildOption.imqaCore);

		Set dependencyTypeSet = new HashSet();
		dependencyTypeSet.add("compile");

		Version gradleVersion = IMQAPlugin.getGradleVersion(project);
		if (gradleVersion.majorVersion == 3) {
            if (gradleVersion.minorVersion >= 1) {
                dependencyTypeSet.clear();
            }

            dependencyTypeSet.add("implementation");
        }

		String dependencyType = "";
		boolean hasMpmDependency = false;
		boolean hasCrashDependency = false;
		boolean hasCoreDependency = false;

		for(Iterator depIter = dependencyTypeSet.iterator(); depIter.hasNext();) {
			dependencyType = String.valueOf(depIter.next());
			Logger.d("Dependency Type", dependencyType);
			compileDeps = project.getConfigurations().getByName(dependencyType).getDependencies();

			if (hasDependency(compileDeps, MPM_SDK_NAME) && BuildOption.imqaMpm) {
				hasMpmDependency = true;
				Logger.d("SDK already imported", MPM_SDK_INFO_FOR_DEPENDENCY);
			}
			if (hasDependency(compileDeps, CRASH_SDK_NAME) && BuildOption.imqaMpm) {
				hasCrashDependency = true;
				Logger.d("SDK already imported", CRASH_SDK_INFO_FOR_DEPENDENCY);
			}
			if (hasDependency(compileDeps, CORE_SDK_NAME) && BuildOption.imqaMpm) {
				hasCoreDependency = true;
				Logger.d("SDK already imported", CORE_SDK_INFO_FOR_DEPENDENCY);
			}
		}

		if (!hasMpmDependency && BuildOption.imqaMpm) {
			dynamicDependencyInject(project, dependencyType, MPM_SDK_INFO_FOR_DEPENDENCY);
		}

		if (!hasCrashDependency && BuildOption.imqaCrash) {
			dynamicDependencyInject(project, dependencyType, CRASH_SDK_INFO_FOR_DEPENDENCY);
		}

		if (!hasCoreDependency && BuildOption.imqaCore) {
			dynamicDependencyInject(project, dependencyType, CORE_SDK_INFO_FOR_DEPENDENCY);
		}
	}


	private static boolean hasDependency(DependencySet compileDeps, String imqaDependency) {
		// 의존성 확인
		boolean hasDependency = false;
		Iterator it = compileDeps.iterator();

		while (it.hasNext()) {
			Dependency dep = it.next();

			if (dep.getGroup() != null
				&& dep.getGroup().equals(IMQA_GROUP_NAME) 
				&& dep.getName().equals(imqaDependency)) {
				hasDependency = true;
			}
		}

		return hasDependency;
	}

	private static void dynamicDependencyInject(Project project, String dependencyType, String name) {
		// 실시간 의존성 추가
		project.getConfigurations()
			.getByName(dependencyType)
			.getDependencies()
			.add(project.getDependencies().create(name));

		Logger.d("SDK Importing", name);
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy