Terminado

Web Java Editor y Runner

Publicado el 27 Junio, 2017 en Programación y Tecnología

Sobre este proyecto

Abierto

Realizar una interface web que permita ingresar el código de una clase Java.
La interface debe ser simple - preferiblemente React.js (no es lo más importante)
El código a ser ingresado / editado puede tener restricciones (tal vez no permitir imports o solo asumir imports de java.lang o java.util) y tambien poder usar recursos predefinidos en el servidor (como pool de conexiones a bases de datos y paquetes preestablecidos)
En principio. Como prueba de concepto se puede hacer como ejemplo hacer un select de una base de datos a partir de una conexion seteada en el servidor
Entregable debe ser un war y las clases java asociadas que corra en Tomcat
La solucion debe parsear el input ingresado y ejecutarlo
(En la propuesta por favor especificar la estrategia para implementar la solucion)
No es necesario guardar el codigo ingresado (Podria ser una solucion donde en un editBox se pegue informacion)
El editor deberia admitir Tabs y Enter
La ejecucion involucraria solo una clase. Todo lo necesario para correr estaria en la clase ingresada y en los recursos disponibles en el servidor

Se pueden usar libraries libres para parsear / editar (tal vez no sea necesario parsear sino solo mostrar los errores que devuelva la compilacion y la ejecucion)


--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Detalles:

Como funcionará la aplicación.


Debe ser generada con maven.
Package: war
Java 1.8
Spring Rest Controller

Descripcion de Caso de Uso

El sistema muestra el form que contiene basicamente
Un TextBox (Name: Nombre del componente a cargar)
Un EditBox (Que puede colorearse de acuerdo a la sintaxis - no necesario,
            donde se carga el codigo Java
            No se cargará el renglón class.
            Cargará al menos un único método público (el método principal)
            El método principal tendrá un único parámetro de entrada (que podría ser Object)
            El método principal tendrá un valor de retorno que será Object
            Cargará otros métodos
            Podrá cargar propiedades y otras sentencias.
            )
Un botón submit.
Preferentemente React.js (a lo sumo HTML pero no Angular ni jQuery)


El botón submit envía el string cargado a un servicio REST capturado por un controller de Spring

El servidor recibe como text el código cargado y completa adecuadamente la clase.
El servidor puede parsear (Este paso podría ser innecesario)

El servidor compila el string enviado
Evitar usar herramientas externas (ant y si es posible evitar llamada al sistema operativo como  run javac)

Ver : soluciones del estilo
https://stackoverflow.com/questions/7989135/is-it-possible-to-programmatically-compile-java-source-code-in-memory-only


Existirá otra página
Form
    identificador de la clase ingresada previamente
    uno o dos datos (Ejemplo: Cliente.nombre (String) / Cliente.edad (int))
y se enviará como JSON en Serivicio REST implementado con Spring
En el backend se tomarán los datos  ingresados
    Conformarán el objecto que se le pasará al método creado en el form anterior
    Se ejecutará la clase    
    Devolverá como resultado
            El objeto que devuelve el método público    
            (Puede ser mostrado en un log o con println o devuelto al frontend)
            Si se genera un error devolverá El stacktrace del error
            
            
El código Java ingresado sólo hará referencia a clases básicas de java        
    java.lang
    java.util
    
    y a recursos disponibles en el servidor
    
    (Los imports de los recursos disponibles en el servidor (Ejemplo un DataSource)
        pueden ser agregados en el backend una vez que se reciba el String del editBox)

Categoría Programación y Tecnología
Subcategoría Programación Web
¿Cuál es el alcance del proyecto? Bug o cambio pequeño
¿Es un proyecto o una posición? Un proyecto
Actualmente tengo Tengo una idea
Disponibilidad requerida Según se necesite
Experiencia en este tipo de proyectos Sí (He administrado este tipo de proyectos anteriormente)
Integraciones de API Otros (Otras APIs)
Roles necesarios Programador

Plazo de Entrega: 01 Julio, 2017

Habilidades necesarias