private void generateEventsHandler() throws Exception { if (domain.getCrudevent() != null || (domain.getEvent() != null && !domain.getEvent().isEmpty())) { final ClassWriter classWriter = new ClassWriter( this, getSrcGeneratedDirectory(), GeneratorHelper.getEventPackage(domain), GeneratorHelper.getMasterHandlerClassName(domain)); classWriter.setInterface(true); if (domain.getCrudevent() != null) { for (final String before : GeneratorHelper.getBeforeEventName()) { classWriter.addExtend(before + domain.getName() + "Handler"); } for (final String after : GeneratorHelper.getAfterEventName()) { classWriter.addExtend(domain.getName() + after + "Handler"); } } if (domain.getEvent() != null) { for (final Event event : domain.getEvent()) { classWriter.addExtend(GeneratorHelper.getHandlerClassName(event)); } } classWriter.generateContentAndStore(); } }
private void generateEvent(final Event event) throws Exception { final ClassWriter classWriter = new ClassWriter( this, getSrcGeneratedDirectory(), GeneratorHelper.getEventPackage(domain), GeneratorHelper.getEventClassName(event)); if (event.getParameter() != null) { for (final Parameter parameter : event.getParameter()) { classWriter.addClassMembers(parameter); } } classWriter.addExtend(GeneratorHelper.getBusinessEventExtends(event)); // Constant classWriter.addConstants( "public static final com.ponysdk.core.event.Event.Type<" + GeneratorHelper.getHandlerClassName(event) + "> TYPE = new com.ponysdk.core.event.Event.Type<" + GeneratorHelper.getHandlerClassName(event) + ">();"); // Build constructor final Parameter sourceComponentParameter = new Parameter(); sourceComponentParameter.setName("sourceComponent"); sourceComponentParameter.setClazz("java.lang.Object"); final List<Parameter> superConstructorParameters = new ArrayList<Parameter>(); superConstructorParameters.add(sourceComponentParameter); final List<Parameter> constructorParameters = new ArrayList<Parameter>(event.getParameter()); constructorParameters.add(0, sourceComponentParameter); final Constructor constructor = new Constructor(constructorParameters, superConstructorParameters); classWriter.addConstructor(constructor); // Build methods classWriter.addLine("@Override"); classWriter.addLine( "protected void dispatch(" + GeneratorHelper.getHandlerClassName(event) + " handler) {"); classWriter.addLine(" handler.on" + event.getName() + "(this);"); classWriter.addLine("}"); classWriter.addNewLine(); classWriter.addLine("@Override"); classWriter.addLine( "public com.ponysdk.core.event.Event.Type<" + GeneratorHelper.getHandlerClassName(event) + "> getAssociatedType() {"); classWriter.addLine(" return TYPE;"); classWriter.addLine("}"); // Adding classWriter.setGenerateGetter(true); classWriter.generateContentAndStore(); }
private void generateCommands() throws Exception { if (domain.getService() != null) { for (final Method method : domain.getService().getMethod()) { final String returnClass = GeneratorHelper.getClassName(method.getReturn()); final ClassWriter classWriter = generateCommandX(method, returnClass); if (returnClass.equals("void") && method.getReturn().getValue() == null) { classWriter.addExtend( "com.ponysdk.core.command.AbstractServiceCommand<java.lang.Object>"); } else { classWriter.addExtend( "com.ponysdk.core.command.AbstractServiceCommand<" + returnClass + ">"); } classWriter.generateContentAndStore(); } } }
private void generatePushCommands() throws Exception { if (domain.getService() != null) { for (final Pushmethod method : domain.getService().getPushmethod()) { final ClassWriter classWriter = generatePushCommandX(method, method.getType()); classWriter.addExtend( "com.ponysdk.core.command.AbstractPushCommand<" + method.getType() + ">"); classWriter.generateContentAndStore(); } } }
private void generateHandler(final Event event) throws Exception { final ClassWriter classWriter = new ClassWriter( this, getSrcGeneratedDirectory(), GeneratorHelper.getEventPackage(domain), GeneratorHelper.getHandlerClassName(event)); classWriter.setInterface(true); classWriter.addExtend("com.ponysdk.core.event.EventHandler"); // Build event method classWriter.addLine( "public void on" + event.getName() + "(" + GeneratorHelper.getEventClassName(event) + " event);"); classWriter.generateContentAndStore(); }
/* * Services : MongoDBDAO */ private void generateMongoDBDAO(final Dao dao) throws Exception { final ClassWriter classWriter = new ClassWriter( this, getSrcGeneratedDirectory(), GeneratorHelper.getDAOPackage(domain), GeneratorHelper.getDAOClassName(domain)); classWriter.addImport("com.fasterxml.jackson.databind.ObjectMapper"); classWriter.addImport("com.mongodb.BasicDBObject"); classWriter.addImport("com.mongodb.DBCollection"); classWriter.addImport("com.mongodb.DBObject"); classWriter.addImport("com.mongodb.DBCursor"); classWriter.addImport("java.util.List"); classWriter.addImport("java.util.ArrayList"); classWriter.addExtend("com.ponysdk.mongodb.dao.MongoDAO"); // Add static logger classWriter.addConstants( "private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(" + GeneratorHelper.getDAOClassName(domain) + ".class);"); // Create constructor final List<Parameter> parameters = new ArrayList<Parameter>(); final Parameter sessionFactoryParameter = new Parameter(); sessionFactoryParameter.setName("sessionFactory"); sessionFactoryParameter.setClazz("org.hibernate.SessionFactory"); // parameters.add(sessionFactoryParameter); final Constructor constructor = new Constructor(parameters, parameters); classWriter.addConstructor(constructor); // Create findById method classWriter.addNewLine(); classWriter.addLine("final public " + dao.getClazz() + " findById(final long id) {"); classWriter.addLine(" if (log.isDebugEnabled()) {"); classWriter.addLine( " log.debug(\"getting " + domain.getName() + " instance with id: \" + id);"); classWriter.addLine(" }"); classWriter.addNewLine(); classWriter.addLine(" try {"); classWriter.addLine( " DBCollection collection = db.getCollection(\"" + domain.getName().toLowerCase() + "\");"); classWriter.addLine(" BasicDBObject basicDBObject = new BasicDBObject(\"id\"," + "id);"); classWriter.addLine(" final DBObject foundInstance = collection.findOne(basicDBObject);"); classWriter.addLine(" " + dao.getClazz() + " instance = null;"); classWriter.addLine(" return toModel(foundInstance);"); classWriter.addLine(" } catch (final Exception re) {"); classWriter.addLine(" log.error(\"getting " + domain.getName() + " by id failed\", re);"); classWriter.addLine(" throw new RuntimeException(re);"); classWriter.addLine(" }"); classWriter.addLine("}"); classWriter.addLine("private " + dao.getClazz() + " toModel(DBObject dbObject) {"); classWriter.addLine(" if (dbObject == null) return null;"); classWriter.addLine(" final ObjectMapper mapper = new ObjectMapper();"); classWriter.addLine(" try{"); classWriter.addLine( " " + dao.getClazz() + " model = mapper.readValue(dbObject.toString(), " + dao.getClazz() + ".class);"); classWriter.addLine(" model.setID(dbObject.get(\"_id\"));"); classWriter.addLine(" return model;"); classWriter.addLine(" } catch (final Exception e) {"); classWriter.addLine(" log.error(\"toModel " + domain.getName() + " failed\", e);"); classWriter.addLine(" throw new RuntimeException(e);"); classWriter.addLine(" }"); classWriter.addLine("}"); // Create findAll method classWriter.addNewLine(); classWriter.addLine("@SuppressWarnings(\"unchecked\")"); classWriter.addLine("public java.util.List<" + dao.getClazz() + "> findAll() {"); classWriter.addLine(" if (log.isDebugEnabled()) {"); classWriter.addLine(" log.debug(\"finding all " + domain.getName() + "\");"); classWriter.addLine(" }"); classWriter.addNewLine(); classWriter.addLine(" DBCursor cursor = null;"); classWriter.addLine(" try {"); classWriter.addLine( " DBCollection collection = db.getCollection(\"" + domain.getName().toLowerCase() + "\");"); classWriter.addLine(" cursor = collection.find();"); classWriter.addLine( " List<" + dao.getClazz() + "> result = new ArrayList<" + dao.getClazz() + ">();"); classWriter.addLine(" while(cursor.hasNext()){"); classWriter.addLine(" result.add(toModel(cursor.next()));"); classWriter.addLine(" }"); classWriter.addLine(" return result;"); classWriter.addLine(" } catch (final RuntimeException re) {"); classWriter.addLine(" log.error(\"finding all " + domain.getName() + " failed\", re);"); classWriter.addLine(" throw re;"); classWriter.addLine(" } finally{"); classWriter.addLine(" cursor.close();"); classWriter.addLine(" }"); classWriter.addLine("}"); // Create find by query method classWriter.addNewLine(); classWriter.addLine("@SuppressWarnings(\"unchecked\")"); classWriter.addLine("@Override"); classWriter.addLine("public java.util.List<" + dao.getClazz() + "> find(Object query) {"); classWriter.addLine(" if (log.isDebugEnabled()) {"); classWriter.addLine(" log.debug(\"finding " + domain.getName() + " by query\");"); classWriter.addLine(" }"); classWriter.addNewLine(); classWriter.addLine(" DBCursor cursor = null;"); classWriter.addLine(" try {"); classWriter.addLine( " DBCollection collection = db.getCollection(\"" + domain.getName().toLowerCase() + "\");"); classWriter.addLine(" cursor = collection.find((DBObject)query);"); classWriter.addLine( " List<" + dao.getClazz() + "> result = new ArrayList<" + dao.getClazz() + ">();"); classWriter.addLine(" while(cursor.hasNext()){"); classWriter.addLine(" result.add(toModel(cursor.next()));"); classWriter.addLine(" }"); classWriter.addLine(" return result;"); classWriter.addLine(" } catch (final RuntimeException re) {"); classWriter.addLine(" log.error(\"find " + domain.getName() + " failed\", re);"); classWriter.addLine(" throw re;"); classWriter.addLine(" } finally{"); classWriter.addLine(" cursor.close();"); classWriter.addLine(" }"); classWriter.addLine("}"); classWriter.generateContentAndStore(); }
private void generateHibernateDAO(final Dao dao) throws Exception { final ClassWriter classWriter = new ClassWriter( this, getSrcGeneratedDirectory(), GeneratorHelper.getDAOPackage(domain), GeneratorHelper.getDAOClassName(domain)); classWriter.addExtend("com.ponysdk.hibernate.dao.HibernateDAO"); // Add static logger classWriter.addConstants( "private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(" + GeneratorHelper.getDAOClassName(domain) + ".class);"); // Create constructor final List<Parameter> parameters = new ArrayList<Parameter>(); final Parameter sessionFactoryParameter = new Parameter(); sessionFactoryParameter.setName("sessionFactory"); sessionFactoryParameter.setClazz("org.hibernate.SessionFactory"); parameters.add(sessionFactoryParameter); final Constructor constructor = new Constructor(parameters, parameters); classWriter.addConstructor(constructor); // Create findById method classWriter.addNewLine(); classWriter.addLine("final public " + dao.getClazz() + " findById(final long id) {"); classWriter.addLine(" if (log.isDebugEnabled()) {"); classWriter.addLine( " log.debug(\"getting " + domain.getName() + " instance with id: \" + id);"); classWriter.addLine(" }"); classWriter.addNewLine(); classWriter.addLine(" try {"); classWriter.addLine( " " + dao.getClazz() + " instance = (" + dao.getClazz() + ") sessionFactory.getCurrentSession().get(" + dao.getClazz() + ".class, id);"); classWriter.addLine(" return instance;"); classWriter.addLine(" } catch (final RuntimeException re) {"); classWriter.addLine(" log.error(\"getting " + domain.getName() + " by id failed\", re);"); classWriter.addLine(" throw re;"); classWriter.addLine(" }"); classWriter.addLine("}"); // Create findAll method classWriter.addNewLine(); classWriter.addLine("@SuppressWarnings(\"unchecked\")"); classWriter.addLine("public java.util.List<" + dao.getClazz() + "> findAll() {"); classWriter.addLine(" if (log.isDebugEnabled()) {"); classWriter.addLine( " log.debug(\"finding " + domain.getName() + " instance by example\");"); classWriter.addLine(" }"); classWriter.addNewLine(); classWriter.addLine(" try {"); classWriter.addLine( " final java.util.List<" + dao.getClazz() + "> results = sessionFactory.getCurrentSession().createQuery(\"FROM " + domain.getName() + "\").list();"); classWriter.addLine(" return results;"); classWriter.addLine(" } catch (final RuntimeException re) {"); classWriter.addLine(" log.error(\"finding all " + domain.getName() + " failed\", re);"); classWriter.addLine(" throw re;"); classWriter.addLine(" }"); classWriter.addLine("}"); classWriter.generateContentAndStore(); }
private void generateService() throws Exception { final String className = GeneratorHelper.getServiceClassName(domain); final ClassWriter classWriter = new ClassWriter( this, getSrcGeneratedDirectory(), GeneratorHelper.getServicePackage(domain), className); classWriter.setInterface(true); classWriter.addExtend("com.ponysdk.core.service.PonyService"); if (domain.getService() != null) { for (final Method method : domain.getService().getMethod()) { final String returnClass = GeneratorHelper.getClassName(method.getReturn()); classWriter.addLine( "public " + returnClass + " " + method.getName() + "(" + GeneratorHelper.getParameterToString(method.getParameter()) + ") throws Exception;"); } for (final Pushmethod method : domain.getService().getPushmethod()) { if (method.getParameter().isEmpty()) { classWriter.addLine( "public com.ponysdk.core.event.HandlerRegistration " + method.getName() + "Registration(com.ponysdk.core.command.PushListener<" + method.getType() + "> listener);"); } else { classWriter.addLine( "public com.ponysdk.core.event.HandlerRegistration " + method.getName() + "Registration(" + GeneratorHelper.getParameterToString(method.getParameter()) + ", com.ponysdk.core.command.PushListener<" + method.getType() + "> listener);"); } } final Dao dao = domain.getService().getDao(); if (dao != null) { switch (dao.getDaoLayer()) { case HIBERNATE: generateHibernateDAO(dao); break; case MONGODB: generateMongoDBDAO(dao); break; default: System.err.println( dao.getDaoLayer() + " HibernateDAO generation ignored for class" + domain.getService().getDao().getClazz() + ". Only " + DaoLayer.HIBERNATE + " is supported"); } } } classWriter.generateContentAndStore(); }