Iniziata implementazione nuova distribuzione collo

This commit is contained in:
2019-02-12 10:47:03 +01:00
parent 487bcae59f
commit f560fd7801
17 changed files with 124 additions and 58 deletions

View File

@@ -83,7 +83,7 @@ android {
abortOnError false
}
dynamicFeatures = [":dynamic__base"]
dynamicFeatures = [":dynamic_vgalimenti"]
}

View File

@@ -21,6 +21,7 @@ import android.view.View;
import androidx.fragment.app.FragmentTransaction;
import it.integry.integrywmsnative.core.REST.watcher.ServerStatusChecker;
import it.integry.integrywmsnative.core.class_router.BaseRouter;
import it.integry.integrywmsnative.core.interfaces.IFilterableFragment;
import it.integry.integrywmsnative.core.interfaces.IPoppableActivity;
import it.integry.integrywmsnative.core.interfaces.IScrollableFragment;
@@ -75,6 +76,9 @@ public class MainActivity extends AppCompatActivity
pop();
init();
BaseRouter.invokePath(BaseRouter.PATH.DISTRIBUZIONE_COLLO_V, null, null);
}

View File

@@ -1,7 +1,10 @@
package it.integry.integrywmsnative.core.class_router;
import android.content.Context;
import android.util.Pair;
import com.orhanobut.logger.Logger;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
@@ -10,31 +13,42 @@ import it.integry.integrywmsnative.core.class_router.exceptions.MethodParameterT
import it.integry.integrywmsnative.core.class_router.exceptions.MethodParamsCountException;
import it.integry.integrywmsnative.core.class_router.exceptions.MethodPathAlreadyDeclaredException;
import it.integry.integrywmsnative.core.class_router.exceptions.MethodPathNotRegisteredException;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityLogger;
public class BaseRouter {
public enum PATH {
DISTRIBUZIONE_COLLO_V
}
private static List<Pair<String, MethodDTO>> mRoutePaths = new ArrayList<>();
private static Context context;
private static boolean checkIfMethodExists(String path) {
private static List<Pair<PATH, MethodDTO>> mRoutePaths = new ArrayList<>();
public static void init(Context context) {
BaseRouter.context = context;
}
private static boolean checkIfMethodExists(PATH path) {
boolean methodAlreadyDeclared = false;
for(int i = 0; i < mRoutePaths.size() && !methodAlreadyDeclared; i++) {
if(mRoutePaths.get(i).first.equalsIgnoreCase(path)) methodAlreadyDeclared = true;
if(mRoutePaths.get(i).first == path) methodAlreadyDeclared = true;
}
return methodAlreadyDeclared;
}
private static int getMethodIndex(String path) {
private static int getMethodIndex(PATH path) {
for(int i = 0; i < mRoutePaths.size(); i++) {
if(mRoutePaths.get(i).first.equalsIgnoreCase(path)) return i;
if(mRoutePaths.get(i).first == path) return i;
}
return -1;
}
public static void registerPath(String path, MethodDTO method) throws MethodPathAlreadyDeclaredException {
public static void registerPath(PATH path, MethodDTO method) throws MethodPathAlreadyDeclaredException {
if(checkIfMethodExists(path)) {
throw new MethodPathAlreadyDeclaredException(path);
}
@@ -42,36 +56,42 @@ public class BaseRouter {
mRoutePaths.add(new Pair<>(path, method));
}
public static void deregisterPath(String path) {
public static void deregisterPath(PATH path) {
if(checkIfMethodExists(path)) {
mRoutePaths.remove(getMethodIndex(path));
}
}
public static void invokePath(String path, Object... params) throws MethodPathNotRegisteredException, MethodParamsCountException, MethodParameterTypeNotMatchException, InvocationTargetException, IllegalAccessException {
if(!checkIfMethodExists(path)) {
throw new MethodPathNotRegisteredException(path);
}
public static void invokePath(PATH path, Object... params) {
try {
MethodDTO methodDTO = mRoutePaths.get(getMethodIndex(path)).second;
Class[] methodParameters = methodDTO.getMethod().getParameterTypes();
if(methodParameters.length != params.length) {
throw new MethodParamsCountException(path);
}
for(int i = 0; i < params.length; i++) {
if(params[i].getClass() != methodParameters[i] && methodParameters[i].cast(params[i]) == null) {
throw new MethodParameterTypeNotMatchException(params[i].getClass().getCanonicalName(), path, methodParameters[i].getCanonicalName());
if (!checkIfMethodExists(path)) {
throw new MethodPathNotRegisteredException(path);
}
MethodDTO methodDTO = mRoutePaths.get(getMethodIndex(path)).second;
Class[] methodParameters = methodDTO.getMethod().getParameterTypes();
if (methodParameters.length != params.length) {
throw new MethodParamsCountException(path);
}
for (int i = 0; i < params.length; i++) {
if (params[i] != null && params[i].getClass() != methodParameters[i] && methodParameters[i].cast(params[i]) == null) {
throw new MethodParameterTypeNotMatchException(path, params[i].getClass().getCanonicalName(), methodParameters[i].getCanonicalName());
}
}
final Object newInstance = methodDTO.getMethod().getDeclaringClass().newInstance();
methodDTO.getMethod().invoke(newInstance, params);
} catch (Exception ex) {
UtilityExceptions.defaultException(context, ex);
Logger.e(ex, ex.getMessage());
}
methodDTO.getMethod().invoke(null, params);
}

View File

@@ -1,9 +1,11 @@
package it.integry.integrywmsnative.core.class_router.exceptions;
import it.integry.integrywmsnative.core.class_router.BaseRouter;
public class MethodParameterTypeNotMatchException extends Exception{
public MethodParameterTypeNotMatchException(String path, String type1, String type2) {
super(String.format("The given parameter (%s) to %s don't match the required type %s", type1, path, type2));
public MethodParameterTypeNotMatchException(BaseRouter.PATH path, String type1, String type2) {
super(String.format("The given parameter (%s) to %s don't match the required type %s", type1, path.toString(), type2));
}
}

View File

@@ -1,9 +1,11 @@
package it.integry.integrywmsnative.core.class_router.exceptions;
import it.integry.integrywmsnative.core.class_router.BaseRouter;
public class MethodParamsCountException extends Exception {
public MethodParamsCountException(String path) {
super(String.format("Given parameters to path %s do not match the real method declaration", path));
public MethodParamsCountException(BaseRouter.PATH path) {
super(String.format("Given parameters to path %s do not match the real method declaration", path.toString()));
}
}

View File

@@ -1,10 +1,12 @@
package it.integry.integrywmsnative.core.class_router.exceptions;
import it.integry.integrywmsnative.core.class_router.BaseRouter;
public class MethodPathAlreadyDeclaredException extends Exception {
public MethodPathAlreadyDeclaredException(String path) {
public MethodPathAlreadyDeclaredException(BaseRouter.PATH path) {
super(String.format("Method %s is already declared in this scope", path));
super(String.format("Method %s is already declared in this scope", path.toString()));
}

View File

@@ -1,9 +1,11 @@
package it.integry.integrywmsnative.core.class_router.exceptions;
import it.integry.integrywmsnative.core.class_router.BaseRouter;
public class MethodPathNotRegisteredException extends Exception{
public MethodPathNotRegisteredException(String path){
super(String.format("Method path %s isn't registered at the moment. Please call BaseRouter.registerPath before call invoke.", path));
public MethodPathNotRegisteredException(BaseRouter.PATH path){
super(String.format("Method path %s isn't registered at the moment. Please call BaseRouter.registerPath before call invoke.", path.toString()));
}
}

View File

@@ -13,6 +13,7 @@ import io.fabric.sdk.android.Fabric;
import it.integry.integrywmsnative.BuildConfig;
import it.integry.integrywmsnative.core.REST.watcher.ServerStatusChecker;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.class_router.BaseRouter;
import it.integry.integrywmsnative.core.data_recover.ColliDataRecover;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.settings.Stash;
@@ -94,6 +95,7 @@ public class AppContext {
GhostFish.create(mContext);
try {
String initMethod = "init";
Class dynamicContextClass = Class.forName("it.integry.wms.dynamic_customization.DynamicContext");

View File

@@ -23,13 +23,7 @@ public class MainContext {
onContextInitialized.run();
});
try {
BaseRouter.invokePath("testToast", mContext);
} catch (Exception ex) {
Log.e("PIF", ex.getMessage());
}
BaseRouter.init(mContext);
}