List of usage examples for com.google.gwt.core.ext.typeinfo JClassType asParameterizationOf
JParameterizedType asParameterizationOf(JGenericType type);
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("}"); }