Example usage for com.google.gwt.core.ext.typeinfo JClassType asParameterizationOf

List of usage examples for com.google.gwt.core.ext.typeinfo JClassType asParameterizationOf

Introduction

In this page you can find the example usage for com.google.gwt.core.ext.typeinfo JClassType asParameterizationOf.

Prototype

JParameterizedType asParameterizationOf(JGenericType type);

Source Link

Usage

From source file:com.guit.rebind.jsorm.JsonSerializerUtil.java

License:Apache License

public static String generate(TreeLogger logger, GeneratorContext context, JClassType pojoType)
        throws UnableToCompleteException {
    JsonSerializerUtil.logger = logger;/* w w w  .  j ava  2  s  . co  m*/

    // We cannot serialize java.lang.Object
    String pojoQualifiedName = pojoType.getQualifiedSourceName();
    if (pojoQualifiedName.equals(Object.class.getCanonicalName())) {
        error("You cannot serialize Object... we either");
    }

    if (exceptions == null) {
        exceptions = new HashMap<String, String>();
        try {
            List<String> ormExceptions = context.getPropertyOracle()
                    .getConfigurationProperty("json.orm.exception").getValues();
            for (String e : ormExceptions) {
                String[] parts = e.split(" ");
                if (parts.length != 2) {
                    error("Bad json orm exception format. i.e 'java.util.List java.util.ArrayList<%s>. Found: %s'",
                            e);
                }
                exceptions.put(parts[0], parts[1]);
            }
        } catch (BadPropertyValueException e) {
            throw new IllegalStateException(e);
        }
    }

    String parameterizedQualifiedSourceName = pojoType.getParameterizedQualifiedSourceName();
    String typeName = parameterizedQualifiedSourceName;

    // Basic types
    if (typeName.equals(Void.class.getCanonicalName())) {
        return VoidSerializer.class.getCanonicalName();
    } else if (typeName.equals(String.class.getCanonicalName())) {
        return StringSerializer.class.getCanonicalName();
    } else if (typeName.equals(Integer.class.getCanonicalName())) {
        return IntegerSerializer.class.getCanonicalName();
    } else if (typeName.equals(Long.class.getCanonicalName())) {
        return LongSerializer.class.getCanonicalName();
    } else if (typeName.equals(Double.class.getCanonicalName())) {
        return DoubleSerializer.class.getCanonicalName();
    } else if (typeName.equals(Float.class.getCanonicalName())) {
        return FloatSerializer.class.getCanonicalName();
    } else if (typeName.equals(Date.class.getCanonicalName())) {
        return DateSerializer.class.getCanonicalName();
    } else if (typeName.equals(Boolean.class.getCanonicalName())) {
        return BooleanSerializer.class.getCanonicalName();
    }

    // Build name avoiding generics collitions
    StringBuilder implName = new StringBuilder();
    makeImplName(pojoType, implName);
    implName.append("_GuitJsonSerializer");

    String packageName = pojoType.getPackage().getName();
    if (packageName.startsWith("java.")) {
        packageName = "com.guit.java." + packageName.substring(5);
    }

    String implNameString = implName.toString();

    if (getClass(packageName, implNameString)) {
        return packageName + "." + implNameString;
    }

    ClassSourceFileComposerFactory composer = new ClassSourceFileComposerFactory(packageName, implNameString);
    composer.addImplementedInterface(TypeJsonSerializer.class.getCanonicalName() + "<" + typeName + ">");
    PrintWriter printWriter = context.tryCreate(logger, packageName, implNameString);
    String createdName = composer.getCreatedClassName();
    if (printWriter != null) {
        SourceWriter writer = composer.createSourceWriter(context, printWriter);

        JType iterableParameterType = null;
        JPrimitiveType iterableParameterPrimitiveType = null;

        // Iterable
        JGenericType iterableType = context.getTypeOracle().findType(Iterable.class.getCanonicalName())
                .isGenericType();
        boolean isIterable = false;
        if (iterableType.isAssignableFrom(pojoType)) {
            isIterable = true;
            iterableParameterType = pojoType.asParameterizationOf(iterableType).getTypeArgs()[0];
            iterableParameterPrimitiveType = iterableParameterType.isPrimitive();

            // Find if theres any exception
            String qualifiedSourceName = pojoQualifiedName;
            if (exceptions.containsKey(qualifiedSourceName)) {
                parameterizedQualifiedSourceName = exceptions.get(qualifiedSourceName) + "<"
                        + iterableParameterType.getParameterizedQualifiedSourceName() + ">";
            }
        }

        // Map
        JGenericType mapType = context.getTypeOracle().findType(Map.class.getCanonicalName()).isGenericType();
        boolean isMap = false;
        JClassType mapKeyType = null;
        JClassType mapValueType = null;
        if (mapType.isAssignableFrom(pojoType)) {
            isMap = true;
            JParameterizedType pojoMap = pojoType.asParameterizationOf(mapType);
            JClassType[] args = pojoMap.getTypeArgs();
            mapKeyType = args[0];
            mapValueType = args[1];

            // Find if theres any exception
            String qualifiedSourceName = pojoQualifiedName;
            if (exceptions.containsKey(qualifiedSourceName)) {
                parameterizedQualifiedSourceName = exceptions.get(qualifiedSourceName) + "<"
                        + mapKeyType.getParameterizedQualifiedSourceName() + ","
                        + mapValueType.getParameterizedQualifiedSourceName() + ">";
            }
        }

        // Array
        boolean isArray = false;
        JArrayType pojoArray = pojoType.isArray();
        if (pojoArray != null) {
            isArray = true;
            iterableParameterType = pojoArray.getComponentType();
            iterableParameterPrimitiveType = iterableParameterType.isPrimitive();
        }

        // For pojos
        ArrayList<JField> fields = null;

        writer.println("public static " + createdName + " singleton;");

        writer.println("public static " + createdName + " getSingleton() {");
        writer.indent();
        writer.println("return singleton == null ? (singleton = new " + createdName + "()) : singleton;");
        writer.outdent();
        writer.println("}");

        writer.println("@Override");
        writer.println("public " + JSONValue.class.getCanonicalName() + " serialize(" + typeName + " data) {");
        writer.indent();

        if (isMap) {
            writer.println("if (data != null) {");
            writer.indent();
            writer.println(JSONArray.class.getCanonicalName() + " array = new "
                    + JSONArray.class.getCanonicalName() + "();");
            writer.println("int n = 0;");
            writer.println("for (" + Entry.class.getCanonicalName() + "<"
                    + mapKeyType.getParameterizedQualifiedSourceName() + ", "
                    + mapValueType.getParameterizedQualifiedSourceName() + ">" + " entry : data.entrySet()) {");
            writer.indent();

            writer.print("array.set(n, ");
            JPrimitiveType mapKeyPrimitive = mapKeyType.isPrimitive();
            if (mapKeyPrimitive == null) {
                printValueSerialized(logger, context, writer, "entry.getKey()", mapKeyType, pojoType);
            } else {
                printPrimitiveSerialized(typeName, writer, "entry.getKey()", mapKeyPrimitive);
            }
            writer.println(");");
            writer.println("n++;");

            writer.print("array.set(n, ");
            JPrimitiveType mapValuePrimitive = mapValueType.isPrimitive();
            if (mapValuePrimitive == null) {
                printValueSerialized(logger, context, writer, "entry.getValue()", mapValueType, pojoType);
            } else {
                printPrimitiveSerialized(typeName, writer, "entry.getValue()", mapValuePrimitive);
            }
            writer.println(");");
            writer.println("n++;");

            writer.outdent();
            writer.println("}");
            writer.println("return array;");
            writer.outdent();
            writer.println("}");
            writer.println("return " + JSONNull.class.getCanonicalName() + ".getInstance();");
        } else if (isIterable || isArray) {
            writer.println("if (data != null) {");
            writer.indent();
            writer.println(JSONArray.class.getCanonicalName() + " array = new "
                    + JSONArray.class.getCanonicalName() + "();");
            writer.println("int n = 0;");
            writer.println(
                    "for (" + iterableParameterType.getParameterizedQualifiedSourceName() + " item : data) {");
            writer.indent();

            writer.print("array.set(n, ");
            if (iterableParameterPrimitiveType == null) {
                printValueSerialized(logger, context, writer, "item", iterableParameterType, pojoType);
            } else {
                printPrimitiveSerialized(typeName, writer, "item", iterableParameterPrimitiveType);
            }
            writer.println(");");
            writer.println("n++;");

            writer.outdent();
            writer.println("}");
            writer.println("return array;");
            writer.outdent();
            writer.println("}");
            writer.println("return " + JSONNull.class.getCanonicalName() + ".getInstance();");
        } else if (pojoType.isEnum() != null) {
            writer.println("if (data != null) {");
            writer.indent();
            writer.println("return new " + JSONString.class.getCanonicalName() + "(data.name());");
            writer.outdent();
            writer.println("}");
            writer.println("return " + JSONNull.class.getCanonicalName() + ".getInstance();");
        } else {
            // Assert the type have an empty constructor
            try {
                pojoType.getConstructor(emptyParameter);
            } catch (NotFoundException e) {
                error("The data type of the place does not have an empty constructor. Found %s", typeName);
            }

            writer.println(jsonObject + " json = new " + jsonObject + "();");

            fields = new ArrayList<JField>();
            getFields(fields, pojoType);
            for (JField f : fields) {
                String fieldName = f.getName();
                String getterName = fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
                JType fieldType = f.getType();
                JPrimitiveType primitive = fieldType.isPrimitive();
                String fieldTypeQualifiedType = fieldType.getQualifiedSourceName();

                if (primitive != null) {
                    writer.print("json.put(\"" + fieldName + "\",");
                    printPrimitiveSerialized(typeName, writer, "get" + getterName + "(data)", primitive);
                    writer.println(");");
                } else {
                    writer.println(
                            fieldTypeQualifiedType + " " + fieldName + " = get" + getterName + "(data);");
                    writer.println("if (" + fieldName + " != null) {");
                    writer.indent();

                    writer.print("json.put(\"" + fieldName + "\",");
                    printValueSerialized(logger, context, writer, fieldName, fieldType, pojoType);
                    writer.println(");");

                    writer.outdent();
                    writer.println("}");
                }
            }

            writer.println("return json;");
        }

        writer.outdent();
        writer.println("}");

        // Getters and setters
        printJsniGettersAndSetters(writer, pojoType);

        writer.println("@Override");
        writer.println(
                "public " + typeName + " deserialize(" + JSONValue.class.getCanonicalName() + " jsonValue) {");
        writer.indent();

        if (isMap) {
            writer.println("if (jsonValue.isNull() == null) {");
            writer.indent();

            writer.println(JSONArray.class.getCanonicalName() + " jsonArray = jsonValue.isArray();");
            writer.println("int jsonArraySize = jsonArray.size();");

            writer.println(parameterizedQualifiedSourceName + " map = new " + parameterizedQualifiedSourceName
                    + "();");

            writer.println("for (int n = 0; n < jsonArraySize; n+=2) {");
            writer.indent();
            writer.println(JSONValue.class.getCanonicalName() + " key = jsonArray.get(n);");
            writer.println(JSONValue.class.getCanonicalName() + " value = jsonArray.get(n + 1);");

            writer.print("map.put(");
            JPrimitiveType mapKeyPrimitive = mapKeyType.isPrimitive();
            if (mapKeyPrimitive == null) {
                printValueDeserialized(logger, context, writer, "key", mapKeyType);
            } else {
                printPrimitiveDeserialized(typeName, writer, "key", mapKeyPrimitive);
            }
            writer.print(",");
            JPrimitiveType mapValuePrimitive = mapValueType.isPrimitive();
            if (mapValuePrimitive == null) {
                printValueDeserialized(logger, context, writer, "value", mapValueType);
            } else {
                printPrimitiveDeserialized(typeName, writer, "value", mapValuePrimitive);
            }
            writer.println(");");

            writer.outdent();
            writer.println("}");
            writer.println("return map;");
            writer.outdent();
            writer.println("} else { return null; }");
        } else if (isIterable || isArray) {
            writer.println("if (jsonValue.isNull() == null) {");
            writer.indent();

            writer.println(JSONArray.class.getCanonicalName() + " jsonArray = jsonValue.isArray();");
            writer.println("int jsonArraySize = jsonArray.size();");

            if (isIterable) {
                writer.println(parameterizedQualifiedSourceName + " array = new "
                        + parameterizedQualifiedSourceName + "();");
            } else {
                JArrayType array = iterableParameterType.isArray();
                if (array != null) {
                    String arrayName = array.getQualifiedSourceName() + "[]";
                    int index = arrayName.indexOf("[");
                    String arrayDeclaration = arrayName.substring(0, index + 1) + "jsonArraySize"
                            + arrayName.substring(index + 1);
                    writer.println(arrayName + " array = new " + arrayDeclaration + ";");
                } else {
                    String parameterQualifiedName = iterableParameterType.getQualifiedSourceName();
                    writer.println(parameterQualifiedName + "[] array = new " + parameterQualifiedName
                            + "[jsonArraySize];");
                }
            }

            writer.println("for (int n = 0; n < jsonArraySize; n++) {");
            writer.indent();
            writer.println(JSONValue.class.getCanonicalName() + " item = jsonArray.get(n);");

            if (isIterable) {
                writer.print("array.add(");
            } else {
                writer.print("array[n] = ");
            }

            if (iterableParameterPrimitiveType == null) {
                printValueDeserialized(logger, context, writer, "item", iterableParameterType);
            } else {
                printPrimitiveDeserialized(typeName, writer, "item", iterableParameterPrimitiveType);
            }

            if (isIterable) {
                writer.println(");");
            } else {
                writer.println(";");
            }

            writer.outdent();
            writer.println("}");
            writer.println("return array;");
            writer.outdent();
            writer.println("} else { return null; }");
        } else if (pojoType.isEnum() != null) {
            writer.println("if (jsonValue.isNull() == null) {");
            writer.indent();
            writer.println("return " + typeName + ".valueOf(jsonValue.isString().stringValue());");
            writer.outdent();
            writer.println("} else { return null; }");

        } else {
            // Assert the type have an empty constructor
            try {
                pojoType.getConstructor(emptyParameter);
            } catch (NotFoundException e) {
                error("The data type of the place does not have an empty constructor. Found %s", typeName);
            }

            writer.println(JSONObject.class.getCanonicalName() + " json = jsonValue.isObject();");
            writer.println(typeName + " instance = new " + typeName + "();");

            for (JField f : fields) {
                String fieldName = f.getName();
                String setterName = fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
                JType fieldType = f.getType();
                JPrimitiveType primitive = fieldType.isPrimitive();
                if (primitive != null) {
                    writer.print("set" + setterName + "(instance,");
                    printPrimitiveDeserialized(typeName, writer, "json.get(\"" + fieldName + "\")", primitive);
                    writer.println(");");
                } else {
                    writer.println("if (json.containsKey(\"" + fieldName + "\")) {");
                    writer.indent();

                    writer.print("set" + setterName + "(instance,");
                    printValueDeserialized(logger, context, writer, "json.get(\"" + fieldName + "\")",
                            fieldType);
                    writer.println(");");

                    writer.outdent();
                    writer.println("}");
                }
            }

            writer.println("return instance;");
        }

        writer.outdent();
        writer.println("}");

        writer.commit(logger);
    }

    return createdName;
}

From source file:com.mvp4g.rebind.config.Mvp4gConfiguration.java

License:Apache License

/**
 * Checks that all history converter names associated to each event is a configured mvp4g
 * element. Verify that these elements are valid. Remove all history converters that aren't used
 * by an event.//from  w  w w. jav a  2s  . c o m
 *
 * @throws InvalidMvp4gConfigurationException
 */
void validateHistoryConverters() throws InvalidMvp4gConfigurationException {

    Map<String, List<EventElement>> historyConverterMap = new HashMap<String, List<EventElement>>();

    List<EventElement> eventList = null;
    String hcName = null;
    String historyName;
    List<String> historyNames = new ArrayList<String>();
    for (EventElement event : events) {
        if (event.hasHistory()) {
            hcName = event.getHistory();
            eventList = historyConverterMap.get(hcName);
            if (eventList == null) {
                eventList = new ArrayList<EventElement>();
                historyConverterMap.put(hcName, eventList);
            }
            eventList.add(event);
            historyName = event.getName();
            if (isRootModule() && (historyName.length() == 0)) {
                throw new InvalidMvp4gConfigurationException(
                        String.format(EMPTY_HISTORY_NAME_ROOT, event.getType()));
            }
            validateHistoryName(historyName, event);
            if (historyNames.contains(historyName)) {
                throw new InvalidMvp4gConfigurationException(
                        String.format(SAME_HISTORY_NAME, event.getType(), event.getName(), historyName));
            }
            historyNames.add(historyName);
        } else if (event.isWithTokenGeneration()) {
            if (isRootModule() || !checkIfParentEventReturnsString(event)) {
                throw new InvalidMvp4gConfigurationException(
                        String.format(TOKEN_WITH_NO_CONVERTER, event.getType()));
            } else {
                event.setTokenGenerationFromParent(Boolean.toString(Boolean.TRUE));
            }
        } else if (event.getName() != event.getType()) {
            throw new InvalidMvp4gConfigurationException(
                    String.format(NAME_WITH_NO_CONVERTER, event.getType()));
        }
    }

    JGenericType hcGenType = getType(null, HistoryConverter.class.getCanonicalName()).isGenericType();
    JClassType eventBusType = getType(null, eventBus.getInterfaceClassName());
    String clearHistoryClassName = ClearHistory.class.getCanonicalName();
    JClassType clearHistoryType = getType(null, clearHistoryClassName);
    JClassType hcType = null;
    JClassType eventBusParam = null;
    JMethod[] methods = null;
    JParameterizedType genHC = null;
    HistoryConverterElement clearHistoryToRemove = null;

    Set<HistoryConverterElement> toRemove = new HashSet<HistoryConverterElement>();
    for (HistoryConverterElement history : historyConverters) {
        eventList = historyConverterMap.remove(history.getName());
        if (eventList != null) {

            hcType = getType(history, history.getClassName());

            // if historyConverter is a ClearHistory instance, no control
            // needed
            if (!clearHistoryType.equals(hcType)) {

                genHC = hcType.asParameterizationOf(hcGenType);
                if (genHC == null) {
                    throw new InvalidClassException(history, HistoryConverter.class.getCanonicalName());
                }

                methods = genHC.getMethods();

                eventBusParam = (JClassType) methods[0].getParameters()[2].getType();

                // Control if history converter event bus is compatible with
                // module event bus
                if (!eventBusType.isAssignableTo(eventBusParam)) {
                    throw new InvalidTypeException(history, "Event Bus", eventBusParam.getQualifiedSourceName(),
                            eventBus.getInterfaceClassName());
                }
            }
        } else {
            if (!clearHistoryClassName.equals(history.getClassName())) {
                // this object is not used, you can remove it
                toRemove.add(history);
            } else {
                clearHistoryToRemove = history;
            }
        }
    }

    // Missing history converter
    if (!historyConverterMap.isEmpty()) {
        String it = historyConverterMap.keySet().iterator().next();
        throw new UnknownConfigurationElementException(historyConverterMap.get(it).get(0), it);
    }

    // remove clear history (you don't want this to appear on log)
    if (clearHistoryToRemove != null) {
        historyConverters.remove(clearHistoryToRemove);
    }

    removeUselessElements(historyConverters, toRemove);

}

From source file:com.mvp4g.rebind.config.Mvp4gConfiguration.java

License:Apache License

/**
 * Checks that all event handler names correspond to a configured mvp4g element. Verify that
 * these elements are valid. Remove the ones that don't handle events or aren't associated with
 * the start view.</p>/*from ww  w .  j  a va 2 s. c o  m*/
 *
 * @throws InvalidMvp4gConfigurationException
 */
void validateEventHandlers() throws InvalidMvp4gConfigurationException {

    Map<String, List<EventElement>> presenterAndEventHandlerMap = new HashMap<String, List<EventElement>>();
    Map<String, List<EventElement>> activateMap = new HashMap<String, List<EventElement>>();
    Map<String, List<EventElement>> deactivateMap = new HashMap<String, List<EventElement>>();
    Map<String, List<EventElement>> generateMap = new HashMap<String, List<EventElement>>();
    // binds map validates in the same rules as presenters and event
    // handlers and added to the same map
    Map<JClassType, List<EventElement>> broadcastMap = new HashMap<JClassType, List<EventElement>>();

    // Add presenter that handles event
    List<EventElement> eventList;
    List<String> activates, deactivates, handlers, binds, generates;
    String broadcast;
    JClassType type;
    for (EventElement event : events) {
        handlers = event.getHandlers();
        activates = event.getActivate();
        deactivates = event.getDeactivate();
        broadcast = event.getBroadcastTo();
        generates = event.getGenerate();
        binds = event.getBinds();
        if (handlers != null) {
            for (String handler : handlers) {
                // checking that we don't have the same handler in the binds
                // and in the handlers annotation
                if (binds != null && binds.contains(handler)) {
                    throw new InvalidMvp4gConfigurationException(
                            String.format(BIND_AND_HANDLER_FOR_SAME_EVENT, event.getType(), handler, handler));
                }
                eventList = presenterAndEventHandlerMap.get(handler);
                if (eventList == null) {
                    eventList = new ArrayList<EventElement>();
                    presenterAndEventHandlerMap.put(handler, eventList);
                }
                eventList.add(event);
            }
        }
        if (activates != null) {

            for (String activate : activates) {
                eventList = presenterAndEventHandlerMap.get(activate);
                if ((deactivates != null) && (deactivates.contains(activate))) {
                    throw new InvalidMvp4gConfigurationException(
                            String.format(ACTIVATE_DEACTIVATE_SAME_TIME, event, activate));
                }

                if (eventList == null) {
                    eventList = new ArrayList<EventElement>();
                    activateMap.put(activate, eventList);
                }
                eventList.add(event);
            }
        }
        if (deactivates != null) {
            for (String deactivate : deactivates) {
                eventList = presenterAndEventHandlerMap.get(deactivate);
                if (eventList == null) {
                    eventList = new ArrayList<EventElement>();
                    deactivateMap.put(deactivate, eventList);
                }
                eventList.add(event);
            }
        }
        if (broadcast != null) {
            type = getType(event, broadcast);
            eventList = broadcastMap.get(type);
            if (eventList == null) {
                eventList = new ArrayList<EventElement>();
                broadcastMap.put(type, eventList);
            }
            eventList.add(event);
        }
        if (generates != null) {
            for (String generate : generates) {
                eventList = generateMap.get(generate);
                if (eventList == null) {
                    eventList = new ArrayList<EventElement>();
                    generateMap.put(generate, eventList);
                }
                eventList.add(event);
            }
        }
        // we are handling two exceptions with binds, if the event is
        // passive and it has binds elements
        if (event.isPassive() && (binds != null) && (binds.size() > 0)) {
            throw new InvalidMvp4gConfigurationException(
                    String.format(BIND_FOR_PASSIVE_EVENT, event.getName()));
        }
        // create list of binds to ensure that presenter will not be deleted
        // later
        if (binds != null) {
            for (String bind : binds) {
                eventList = presenterAndEventHandlerMap.get(bind);
                if (eventList == null) {
                    eventList = new ArrayList<EventElement>();
                    presenterAndEventHandlerMap.put(bind, eventList);
                }
                eventList.add(event);
            }
        }
    }

    boolean hasStartView = start.hasPresenter();
    String startPresenter = start.getPresenter();
    JGenericType presenterGenType = getType(null, PresenterInterface.class.getCanonicalName()).isGenericType();
    JGenericType eventHandlerGenType = getType(null, EventHandlerInterface.class.getCanonicalName())
            .isGenericType();
    JGenericType reverseViewGenType = getType(null, ReverseViewInterface.class.getCanonicalName())
            .isGenericType();
    JClassType eventBusType = getType(null, eventBus.getInterfaceClassName());
    JType[] noParam = new JType[0];
    JClassType presenterType, viewParam, presenterParam, viewType;
    ViewElement view = null;
    JParameterizedType genPresenter, genView;
    boolean hasPossibleBroadcast = (broadcastMap.size() > 0);
    Set<PresenterElement> toRemove = new HashSet<PresenterElement>();
    String viewName, name;
    boolean toKeep, notDirectHandler;
    List<EventElement> eventDeactivateList, eventActivateList, eventGenerateList;
    for (PresenterElement presenter : presenters) {
        name = presenter.getName();
        eventList = presenterAndEventHandlerMap.remove(name);// binds presenters are checking as handlers
        eventDeactivateList = deactivateMap.remove(name);
        eventActivateList = activateMap.remove(name);
        eventGenerateList = generateMap.remove(name);
        viewName = presenter.getView();

        toKeep = (eventList != null) || (hasStartView && name.equals(startPresenter))
                || (eventGenerateList != null);
        notDirectHandler = !toKeep && (presenter.isMultiple() || hasPossibleBroadcast);
        if (toKeep || notDirectHandler) {
            toKeep = controlEventBus(presenter, eventHandlerGenType, eventBusType, toKeep);
            if (toKeep) {

                presenterType = getType(presenter, presenter.getClassName());

                toKeep = findPossibleBroadcast(broadcastMap, presenter, presenterType) || !notDirectHandler
                        || presenter.isMultiple();

                if (toKeep) {
                    genPresenter = presenterType.asParameterizationOf(presenterGenType);
                    if (genPresenter == null) {
                        throw new InvalidClassException(presenter, PresenterInterface.class.getCanonicalName());
                    }

                    viewParam = (JClassType) genPresenter.findMethod("getView", noParam).getReturnType();

                    // Control if view injected to the event bus is
                    // compatible with
                    // presenter view type
                    view = getElement(viewName, views, presenter);
                    viewType = getType(view, view.getClassName());
                    if (!viewType.isAssignableTo(viewParam)) {
                        throw new InvalidTypeException(presenter, "View", view.getClassName(),
                                viewParam.getQualifiedSourceName());
                    }

                    if (viewType.isAssignableTo(reverseViewGenType)) {
                        genView = viewType.asParameterizationOf(reverseViewGenType);
                        presenterParam = (JClassType) genView.findMethod("getPresenter", noParam)
                                .getReturnType();
                        if (!presenterType.isAssignableTo(presenterParam)) {
                            throw new InvalidTypeException(view, "Presenter", presenter.getClassName(),
                                    presenterParam.getQualifiedSourceName());
                        }
                        presenter.setInverseView(Boolean.TRUE.toString());

                    }

                    if (!presenter.isMultiple() && !presenter.isAsync()) {
                        view.setInstantiateAtStart(true);
                    }
                }
            }

        }

        if (!toKeep) {
            removeFromActivateDeactivate(eventActivateList, eventDeactivateList, presenter);
            // this object is not used, you can remove it
            toRemove.add(presenter);
        }

        if ((eventGenerateList != null) && (!presenter.isMultiple())) {
            throw new InvalidMvp4gConfigurationException(String.format(GENERATE_NOT_MULTIPLE,
                    eventGenerateList.get(0).getType(), presenter.getName()));
        }
    }

    Set<EventHandlerElement> toRemoveEventHandlers = new HashSet<EventHandlerElement>();
    for (EventHandlerElement eventHandler : eventHandlers) {
        name = eventHandler.getName();
        eventList = presenterAndEventHandlerMap.remove(name);
        eventDeactivateList = deactivateMap.remove(name);
        eventActivateList = activateMap.remove(name);
        eventGenerateList = generateMap.remove(name);

        toKeep = (eventList != null) || (eventGenerateList != null);
        notDirectHandler = !toKeep && (eventHandler.isMultiple() || hasPossibleBroadcast);
        if (toKeep || notDirectHandler) {
            toKeep = controlEventBus(eventHandler, eventHandlerGenType, eventBusType, toKeep);
            if (toKeep) {
                toKeep = findPossibleBroadcast(broadcastMap, eventHandler,
                        getType(eventHandler, eventHandler.getClassName())) || !notDirectHandler
                        || eventHandler.isMultiple();
            }
        }

        if (!toKeep) {
            removeFromActivateDeactivate(eventActivateList, eventDeactivateList, eventHandler);
            // this object is not used, you can remove it
            toRemoveEventHandlers.add(eventHandler);
        }

        if ((eventGenerateList != null) && (!eventHandler.isMultiple())) {
            throw new InvalidMvp4gConfigurationException(String.format(GENERATE_NOT_MULTIPLE,
                    eventGenerateList.get(0).getType(), eventHandler.getName()));
        }
    }

    // Missing handlers
    if (!presenterAndEventHandlerMap.isEmpty()) {
        String it = presenterAndEventHandlerMap.keySet().iterator().next();
        throw new UnknownConfigurationElementException(presenterAndEventHandlerMap.get(it).get(0), it);
    }
    if (!activateMap.isEmpty()) {
        String it = activateMap.keySet().iterator().next();
        throw new UnknownConfigurationElementException(activateMap.get(it).get(0), it);
    }

    if (!deactivateMap.isEmpty()) {
        String it = deactivateMap.keySet().iterator().next();
        throw new UnknownConfigurationElementException(deactivateMap.get(it).get(0), it);
    }
    if (!generateMap.isEmpty()) {
        String it = generateMap.keySet().iterator().next();
        throw new UnknownConfigurationElementException(generateMap.get(it).get(0), it);
    }

    removeUselessElements(presenters, toRemove);
    removeUselessElements(eventHandlers, toRemoveEventHandlers);
}

From source file:com.mvp4g.rebind.config.Mvp4gConfiguration.java

License:Apache License

/**
 * Verify that filters are valid./*from w  w w  .j  av a2  s  . c  o  m*/
 *
 * @throws InvalidMvp4gConfigurationException
 */
void validateEventFilters() throws InvalidMvp4gConfigurationException {

    JGenericType filterGenType = getType(null, EventFilter.class.getCanonicalName()).isGenericType();
    JClassType eventBusType = getType(null, eventBus.getInterfaceClassName());
    JClassType filterType, eventBusParam;
    JParameterizedType genEventFilter;
    for (EventFilterElement filter : eventFilters) {
        filterType = getType(filter, filter.getClassName());
        genEventFilter = filterType.asParameterizationOf(filterGenType);
        if (genEventFilter == null) {
            throw new InvalidClassException(filter, EventFilter.class.getCanonicalName());
        }

        eventBusParam = (JClassType) genEventFilter.getMethods()[0].getParameters()[2].getType();

        // Control if filter event bus is compatible with module
        // event bus
        if (!eventBusType.isAssignableTo(eventBusParam)) {
            throw new InvalidTypeException(filter, "Event Bus", eventBus.getInterfaceClassName(),
                    eventBusParam.getQualifiedSourceName());
        }
    }
}

From source file:com.mvp4g.rebind.config.Mvp4gConfiguration.java

License:Apache License

/**
 * Control if the event bus of the handler is compatible with the module event bus.
 * <p/>/*from  w ww  .  ja  va 2  s .c o  m*/
 * If the handler event bus is not compatible and is not multiple, then throw an exception.
 * <p/>
 * If the handler is multiple, then it's an handler of another module, just ignore it by
 * returning false
 *
 * @param eventHandler
 * @param eventHandlerGenType
 * @param eventBusType
 * @return true if no error, false if the presenter has to be ignored.
 * @throws InvalidClassException  throws if the handler event bus is not compatible
 * @throws InvalidTypeException   throws if the handler event bus is not compatible
 * @throws NotFoundClassException throws if the handler event bus is not compatible
 */
private boolean controlEventBus(EventHandlerElement eventHandler, JGenericType eventHandlerGenType,
        JClassType eventBusType, boolean directHandler)
        throws InvalidClassException, InvalidTypeException, NotFoundClassException {

    JClassType eventHandlerType = getType(eventHandler, eventHandler.getClassName());
    JParameterizedType genEventHandler = eventHandlerType.asParameterizationOf(eventHandlerGenType);
    if (genEventHandler == null) {
        if (directHandler) {
            throw new InvalidClassException(eventHandler, EventHandlerInterface.class.getCanonicalName());
        } else {
            return false;
        }
    }

    JClassType eventBusParam = (JClassType) genEventHandler.findMethod("getEventBus", new JType[0])
            .getReturnType();

    // Control if presenter event bus is compatible with module
    // event bus
    if (!eventBusType.isAssignableTo(eventBusParam)) {
        if (directHandler) {
            throw new InvalidTypeException(eventHandler, "Event Bus", eventBus.getInterfaceClassName(),
                    eventBusParam.getQualifiedSourceName());
        } else {
            return false;
        }
    }

    return true;
}

From source file:com.mvp4g.rebind.config.Mvp4gConfiguration.java

License:Apache License

String validateLoaderAndAdd(JClassType moduleType, JClassType eventBus, Mvp4gElement element)
        throws NotFoundClassException, InvalidTypeException {
    String name = null;/* w ww  .ja  v a2  s .  com*/
    Loader loaderAnnotation = moduleType.getAnnotation(Loader.class);
    if (loaderAnnotation != null) {
        JClassType loaderType = getType(element, loaderAnnotation.value().getCanonicalName());
        JGenericType loaderGenType = getType(null, Mvp4gLoader.class.getCanonicalName()).isGenericType();
        JParameterizedType genLoader = loaderType.asParameterizationOf(loaderGenType);
        JClassType eventBusParam = (JClassType) genLoader.getMethods()[0].getParameters()[0].getType();
        if (!eventBus.isAssignableTo(eventBusParam)) {
            throw new InvalidTypeException(element, "Loader, event bus not compatible",
                    eventBusParam.getQualifiedSourceName(), eventBus.getQualifiedSourceName());
        }
        name = "loader" + loaderType.getQualifiedSourceName().replace(".", "_");
        LoaderElement loader = getElement(name, loaders);
        if (loader == null) {
            loader = new LoaderElement();
            loader.setName(name);
            loader.setClassName(loaderType.getQualifiedSourceName());
            loaders.add(loader);
        }
    }
    return name;
}

From source file:com.totsp.gwittir.serial.json.rebind.JSONCodecGenerator.java

License:Open Source License

@Override
public String generate(TreeLogger logger, GeneratorContext context, String typeName)
        throws UnableToCompleteException {
    logger.log(Type.INFO, "Generating codec for " + typeName);

    JClassType type = null;
    JClassType jsonCodec = null;//from  w  w  w . j  a va 2s .  c o m

    try {
        type = context.getTypeOracle().getType(typeName);
        jsonCodec = context.getTypeOracle().getType(JSONCodec.class.getCanonicalName());
        this.collectionType = context.getTypeOracle().getType(Collection.class.getCanonicalName());
        this.listType = context.getTypeOracle().getType(List.class.getCanonicalName());
        this.setType = context.getTypeOracle().getType(Set.class.getCanonicalName());
        this.numberType = context.getTypeOracle().getType(Number.class.getCanonicalName());
    } catch (NotFoundException ex) {
        logger.log(TreeLogger.ERROR, typeName, ex);

        return null;
    }

    if (type.isClass() != null) { //Don't regenerate from Impls.

        return type.getQualifiedSourceName();
    }

    JClassType subtype = type.asParameterizationOf((JGenericType) jsonCodec).getTypeArgs()[0];
    this.types = this.getIntrospectableTypes(logger, context.getTypeOracle());

    BeanResolver thisType = null;

    for (BeanResolver r : this.types) {
        if (r.getType().equals(subtype)) {
            thisType = r;

            break;
        }
    }

    if (thisType == null) {
        logger.log(Type.ERROR, "Unable to find introspectable type " + subtype);
        throw new UnableToCompleteException();
    }

    this.writeClassSerializer(logger, context, thisType);

    this.writeTopSerializer(logger, context, type, subtype);

    return type.getQualifiedSourceName() + "_Impl";
}

From source file:com.totsp.gwittir.serial.json.rebind.JSONCodecGenerator.java

License:Open Source License

public void writeReader(SourceWriter writer, RProperty prop) {
    if (prop.getWriteMethod() == null) {
        return;// w  w w  . j a v  a2 s .  c  om
    }

    JSONField field = prop.getReadMethod() == null ? null
            : prop.getReadMethod().getBaseMethod().getAnnotation(JSONField.class);
    JSONOmit omit = prop.getReadMethod() == null ? null
            : prop.getReadMethod().getBaseMethod().getAnnotation(JSONOmit.class);
    System.out.println(prop.getName() + " omit " + omit + " field " + field);
    if (omit != null) {
        return;
    }

    String fieldName = (field == null) ? prop.getName() : field.value();

    try {
        writer.println("if(root.containsKey(\"" + fieldName + "\")){");

        if (prop.getType().isPrimitive() == null) {
            writer.println("if(root.get(\"" + fieldName + "\").isNull() != null) {");
            writer.println(this.setterPrefix(prop) + "null);");
            writer.println("} else {");
        }

        if (prop.getType().isArray() != null) {
            JArrayType arrayType = prop.getType().isArray();
            JType paramType = arrayType.getComponentType();
            writer.println("JSONArray array = root.get(\"" + fieldName + "\").isArray();");
            writer.println(paramType.getQualifiedSourceName() + "[] value = new "
                    + paramType.getQualifiedSourceName() + "[ array.size() ];");
            writer.println("for(int i=0; i<array.size(); i++){");
            writer.indent();

            writer.println(" value[i] = " + this.fromType(paramType, "array.get(i)") + ";");

            writer.outdent();
            writer.println("}"); //endfor
            writer.println(this.setterPrefix(prop) + " value );");
        } else if (prop.getType() instanceof JClassType
                && ((JClassType) prop.getType()).isAssignableTo(this.collectionType)) {
            // get the parameter type
            JClassType propType = (JClassType) prop.getType();
            JType paramType = propType.asParameterizationOf((JGenericType) this.collectionType)
                    .getTypeArgs()[0];
            writer.println("JSONArray array = root.get(\"" + fieldName + "\").isArray();");
            writer.println(propType.getParameterizedQualifiedSourceName() + " col = "
                    + this.newCollectionExpression(propType) + ";");
            writer.println("for(int i=0; i<array.size(); i++){");
            writer.indent();

            writer.println(" col.add(" + this.fromType(paramType, "array.get(i)") + ");");

            writer.outdent();
            writer.println("}"); //endfor
            writer.println(this.setterPrefix(prop) + " col );");
        } else {
            writer.println(
                    setterPrefix(prop) + fromType(prop.getType(), "root.get(\"" + fieldName + "\")") + ");");
        }

        if (prop.getType().isPrimitive() == null) {
            writer.println("}"); //end null else
        }

        writer.println("}"); //end contains key
    } catch (Exception e) {
        System.out.println("Exception on prop " + prop);
        throw new RuntimeException(e);
    }
}

From source file:com.totsp.gwittir.serial.json.rebind.JSONCodecGenerator.java

License:Open Source License

private void writeSerializer(SourceWriter writer, BeanResolver r) {
    writer.println("public JSONObject serializeToJSONObject( " + r.getType().getQualifiedSourceName()
            + " source ) throws SerializationException { ");
    writer.indent();//from w  w w  . j  a v  a 2s.c o  m
    writer.println(" JSONObject destination = new JSONObject();");

    for (RProperty prop : r.getProperties().values()) {
        if (prop.getName().equals("class") || prop.getReadMethod() == null) {
            continue;
        }

        JSONField field = prop.getReadMethod().getBaseMethod().getAnnotation(JSONField.class);
        JSONOmit omit = prop.getReadMethod().getBaseMethod().getAnnotation(JSONOmit.class);
        System.out.println(" ws \t " + prop.getName() + " "
                + prop.getReadMethod().getBaseMethod().getEnclosingType()
                + prop.getReadMethod().getBaseMethod().getReadableDeclaration() + " " + omit + " " + field);
        if (omit != null) {
            continue;
        }

        String fieldName = (field == null) ? prop.getName() : field.value();

        if (prop.getReadMethod() != null) {
            JClassType classType = prop.getType().isClassOrInterface();
            JArrayType arrayType = prop.getType().isArray();
            System.out.println(prop.getName() + "  ArrayType " + arrayType + " :: "
                    + ((arrayType == null ? "" : "" + arrayType.getComponentType())));
            if ((classType != null) && (classType.isAssignableTo(this.collectionType)) || arrayType != null) {
                JType subType = (arrayType != null) ? arrayType.getComponentType()
                        : classType.asParameterizationOf(this.collectionType.isGenericType()).getTypeArgs()[0];
                writer.println();
                writer.println(
                        " if( source." + prop.getReadMethod().getBaseMethod().getName() + "() == null ){");
                writer.println("destination.put(\"" + fieldName + "\", JSONNull.getInstance());");
                writer.println(" } else { ");
                writer.println("int i=0; JSONArray value = new JSONArray();");
                writer.println("for( " + subType.getQualifiedSourceName() + " o : source."
                        + prop.getReadMethod().getBaseMethod().getName() + "()){");
                writer.println("   value.set(i++, " + toType(subType, " o ") + ");");
                writer.println("}");
                writer.println("destination.put(\"" + fieldName + "\", value);"); //TODO JSONField
                writer.println("}");
            } else {
                writer.print("destination.put( \"" + fieldName + "\", "); //TODO JSONField
                writer.print(toType(prop.getType(),
                        " source." + prop.getReadMethod().getBaseMethod().getName() + "() ") + ");");
            }
        }
    }

    writer.outdent();
    writer.println("return destination;");
    writer.println("}");

    writer.println("public String serialize(" + r.getType().getQualifiedSourceName()
            + " source ) throws SerializationException { ");
    writer.println("   return serializeToJSONObject(source).toString();");
    writer.println("}");
}

From source file:com.webrippers.gwt.dom.event.gwt.rebind.binder.DomEventBinderGenerator.java

License:Apache License

private void write_doBindEventHandlers(JClassType target, TypeOracle typeOracle, SourceWriter writer,
        TreeLogger logger) {//from w ww . ja  v a  2s. c o m
    writer.println(
            "protected List<HandlerRegistration> doBindEventHandlers(final %s target, IsWidget isWidget) {",
            target.getQualifiedSourceName());
    writer.indent();
    writer.println("List<HandlerRegistration> registrations = new LinkedList<HandlerRegistration>();");

    for (JMethod method : target.getMethods()) {
        DomEventHandler annotation = method.getAnnotation(DomEventHandler.class);
        if (annotation != null) {
            if (method.getParameters().length != 1)
                break;

            JType paramJType = method.getParameters()[0].getType();
            String paramTypeQualifiedSourceName = paramJType.getQualifiedSourceName();

            JClassType paramJClassType = typeOracle.findType(paramTypeQualifiedSourceName);

            if (!paramJClassType.isAssignableTo(typeOracle.findType(DomEvent.class.getCanonicalName())))
                break;

            JGenericType domEventJGenericType = typeOracle.findType(DomEvent.class.getCanonicalName())
                    .isGenericType();
            JParameterizedType paramJParameterizedType = paramJClassType
                    .asParameterizationOf(domEventJGenericType);

            JClassType handlerJClassType = paramJParameterizedType.getTypeArgs()[0];

            writer.println("registrations.add(isWidget.asWidget().addDomHandler(new "
                    + paramJParameterizedType.getTypeArgs()[0].getParameterizedQualifiedSourceName() + "() {");
            writer.indent();
            writer.println(handlerJClassType.getOverridableMethods()[0].getReadableDeclaration(false, false,
                    false, false, true) + " {");
            writer.indent();
            if (annotation.value().length > 0) {
                writer.println("Element targetElement = Element.as(event.getNativeEvent().getEventTarget());");
                if (annotation.value()[0].startsWith("!")) {
                    writer.println("if (targetElement != target." + annotation.value()[0].substring(1) + ") {");
                } else {
                    writer.println("if (targetElement == target." + annotation.value()[0] + ") {");
                }
                writer.indent();
                writer.println("target." + method.getName() + "(event);");
                writer.outdent();
                writer.println("}");
            } else {
                writer.println("target." + method.getName() + "(event);");
            }
            writer.outdent();
            writer.println("}");
            writer.outdent();
            writer.println("}, " + paramTypeQualifiedSourceName + ".getType()));");
        }
    }

    writer.println("return registrations;");
    writer.outdent();
    writer.println("}");
}