Código Inútil
El código fuente que nunca compila...
jueves 2 de diciembre de 2010
Migrando PostgreSQL a MySQL: MySQL Migration Toolkit
No vamos a entrar en detalles, sólo los parámetros necesarios para que la aplicación conecte correctamente y algún punto importante a tener en cuenta.
Seguimos después del salto...
martes 2 de noviembre de 2010
Eliminando puntos de una cadena de texto (String)
Teníamos que eliminar los decimales de unas celdas de excel que contienen un valor del tipo: XYZ.0. Por ejemplo: 237.0; 20.0; etc. El decimal siempre era 0, y había que tratar los números como texto (nada de pasar a entero ya que en algunas celdas, los valores podían ser alfanuméricos).
La solución más inmediata es hacer esto:
cadena = "237.0";Pero esto genera problemas; si la cadena por ejemplo fuese del tipo "hola 10".
cadena = cadena.replaceAll(".0","");
Finalmente la solución pasa por utilizar expresiones regulares. Tenéis un artículo muy bueno en castellano aquí.
La solución para nuestro caso, y para que sólo sustituya a los carácteres ".0" (puntoCero) sería:
cadena = cadena.replaceAll("[.]0", "");
miércoles 27 de octubre de 2010
Descartando clases en el debug desde Eclipse
Hacer debug no es muy divertido cuando estamos ante un proyecto que no conocemos bien, la aplicación pega mil y un saltos entre clases y si además, se mete donde no debe, puede resultar un tanto desquiciante.
Eclipse nos facilita un poco la vida, permitíendonos seleccionar las clases y/o paquetes por los cuales no deseamos que el debug se detenga; algo así como una lista negra.
Simplemente entramos en Windows => Preferences => Java => Debug => Step Filtering
Se nos abrirá una ventana donde podremos agregar todos los paquetes y las clases donde nuestro debug no se debe detener: sencillo y eficaz.
jueves 22 de julio de 2010
Mostrando las calificaciones de usuarios de BlackBoard LS
Blackboard Learning System, un entorno de manejo de cursos. Actualmente esta plataforma está siendo usada a nivel mundial por diversas instituciones relacionadas con la educación, tal es el caso del Servicio Nacional de Aprendizaje SENA en Colombia. También la utilizan la Universidad Nacional de Colombia, la Universidad de los andes y la Pontificia Universidad Javeriana. En México tiene presencia desde hace más de 10 años en diversas universidades e instituciones como el Instituto Tecnológico y de Estudios Superiores de Monterrey (ITESM).
Hemos estado desarrollando un conector que nos sirva para comunicarnos más facilmente con Blackboard y así realizar operaciones del tipo: editar un usuario, inscribir un usuario en un curso, borrar un usuario, etc.
Casi todas estas operaciones se realizan a través de conexiones HTTP y el envío de ficheros xml con la información.
Uno de los puntos más interesantes ha sido la utilización de la API de BB para obtener datos. Para ello, la API se conecta con el WebService correspondiente y así podemos utilizar todas las operaciones que se nos permite.
Aquí el código más interesante:
ContextSDK ctxt = new ContextSDK(new URL(serviceUrlContext));
SessionVO session = ctxt.login("user", "pass", lcid);
GradeBookService gradeBook = new GradeBookSDK(new URL(serviceUrlGradeBook));
El usuario debe de ser un usuario de BBLS con permisos de instructor sobre el curso sobre el que queremos consultar las calificaciones.
Obtenemos el SectionID de la Sección o Curso (sectionId y sectionSource son el source.id y el source.data respectivamente)
long sectionLongId = ctxt.getLearningContextIdBySourcedId("sectionId"," sectionSource");
Obtenemos el columnID de la columna del GradeBook por ejemplo, el ID de la columna "Final"
SectionColumnVO columnsVO[] = gradeBook.getSectionColumns(session, sectionLongId, 2);
for(int i = 0; i < columnsVO . length; i++){
if (columnsVO[i].getLabel().equalsIgnoreCase("Final")){
columnsLongId = columnsVO[i].getId();
}
}
Obtención del memberID a partir del UserId de blackboard:
long memberIds[] = gradeBook.getSectionStudentIDs(session, sectionLongId);
SubjectVO[] members = gradeBook.getMemberDescriptions(session ,memberIds);
for (int i=0; i < members . length; i++){
if (members[i] . getWebctID() . equalsIgnoreCase("NombreDeUsuario")){
memberId = memberIds[i];
}
}
Finalmente, obtenemos las calificaciones
ColumnValue cValues[] = gradeBook.getMemberGradeValues(session, sectionLongId, memberId, columnLongId);
for(int i = 0; i < cValues.length; i++) { if(cValues[i] != null) { System.out.println("La calificación "+columns+" de "+username+" es "+cValues[i].getValue()); } }
Disculpad si se me escapa algo, el código fuente ha sido adaptado de una función que recibía una lista de columnas y una lista de miembros matriculados en un curso.
viernes 5 de febrero de 2010
Conectar a un WebService desde Java con proxy
La solución es bien sencilla:
Properties systemProperties = System.getProperties();
systemProperties.setProperty("http.proxyHost",PROXY_IP);
systemProperties.setProperty("http.proxyPort",PROXY_PORT);
De esta forma nos aseguramos que la conexión se realizará a través del proxy que le indiquemos. Sencillo y eficaz.
domingo 18 de octubre de 2009
JMesa y Struts 2
hoy voy a dejar aquí un pequeño tutorial, paso a paso, de cómo hacer funcionar JMesa en Struts 2 (extendible a cualquier otro framework).
1º Descargamos las librerías y recursos de JMesa.
2º JMesa hace uso de JQuery, con lo cual también necesitaremos bajarnos el JS de su página web.
3º Dentro de nuestro directorio de recursos JS copiamos las librerías: "jmesa.js", "jquery-1.3.2.js", "jquery.jmesa.js".
4º Igualmente copiamos las imágenes que se adjuntan en el zip de JMESA y los 2 CSS para los estilos.
5º Añadimos los JAR a nuestra biblioteca de librerías del proyecto.
6º Copiamos el fichero jmesa.tld en /Webcontent/WEB-INF/tld/jmesa.tld y añadimos la siguiente información en nuestro web.xml
7º En /Webcontent/WEB-INF/ crearemos el fichero "jmesa.properties" donde podemos configurar diversos aspectos de JMesa como el número de resultados por página, etc.
Ejemplo:
html.toolbar.maxRowsDroplist.increments=12,24,36
limit.rowSelect.maxRows=12
8º Por último sólo debemos hacer uso de las bondades de JMesa, para ello tenéis un sencillo ejemplo aquí.
A tener en cuenta:
- El orden de importación de los js es importante. Seguid el orden del ejemplo.
- Para indicarle a JMesa los distintos atributos de nuestros objetos que queremos listar simplemente tenemos que indicarlo con el mismo nombre en htmlColumn property="atributo"
- Los atributos de los beans deben de tener sus respectivos getter().
- Importante incluir la función "onInvokeAction(id)" como se ve en el ejemplo.
Resultado:
EDIT:
Adjunto aquí los 2 archivos anteriores por si no os funciona el servidor de www.box.net.
viernes 21 de agosto de 2009
Modificar campos de un XMLCONTENT en OpenCms
Os adjunto el código que hice hace unos días para dicha tarea (cualquier sugerencia es bien recibida):
<%@ page contentType="text/html"%>
<%@ page pageEncoding="UTF-8"%><%@ page import="java.io.*,java.util.*,
java.net.*,java.sql.*" %>
<%@ page import="org.opencms.jsp.*" %>
<%@ page import="org.opencms.file.*" %>
<%@ page import="org.opencms.file.types.*" %>
<%@ page import="java.util.*" %>
<%@ page import="org.opencms.xml.content.*" %>
<%@ page import="org.opencms.xml.*, org.opencms.xml.types.*" %><%@ taglib prefix="cms" uri="http://www.opencms.org/
taglib/cms " %>
<%CmsJspActionElement cms = new CmsJspActionElement( pageContext, request, response );
CmsJspXmlContentBean cjxc = new CmsJspXmlContentBean(pageContext, request, response);
CmsObject cmsObject = cms.getCmsObject();CmsProject offlineProject = cmsObject.readProject("
Offline");
CmsResource recurso = null;
CmsFile templateFile = null;
CmsXmlContent template = null;
Locale lcl = java.util.Locale.ENGLISH;//En este caso vamos a modificar 2 campos del XMLCONTENT
I_CmsXmlContentValue contentValueCuerpo;
I_CmsXmlContentValue contentValueDescripcion;//Ruta donde se encuentran los XMLCONTENT a modificar
String rutaCarpetas = "/noticias/";
try {
List lista = new ArrayList();
I_CmsXmlContentContainer icms = cjxc.contentload("allInSubTreeDateReleasedDesc", rutaCarpetas + "|noticias", false);
Iterator it = icms.getCollectorResult().iterator();
while (it.hasNext()) {
recurso = (CmsResource) it.next();
templateFile = new CmsFile(recurso);
out.println("R: "+recurso.getRootPath().replace(cms.getRequestContext( ).getSiteRoot(),"") +"
");
cmsObject.lockResource(recurso.getRootPath().replace( cms.getRequestContext(). getSiteRoot(),""));
templateFile = cmsObject.readFile(recurso.getRootPath().replace(cms. getRequestContext(). getSiteRoot(),""));
template = CmsXmlContentFactory.unmarshal(cmsObject, templateFile);
String aux_cuerpo = "";
String aux_descripcion = "";
//Función template.getValue("Campo_del_XSD",Locale)
contentValueCuerpo = template.getValue("Cuerpo", lcl);
aux_cuerpo = contentValueCuerpo.getPlainText(cmsObject);
aux_cuerpo = aux_cuerpo.replace("smaller","");
contentValueCuerpo.setStringValue(cmsObject,aux_ cuerpo);
contentValueDescripcion = template.getValue("Descripcion", lcl);
aux_descripcion = contentValueDescripcion.getPlainText(cmsObject);
aux_descripcion = aux_descripcion.replace("smaller","");
contentValueDescripcion.setStringValue(cmsObject,aux_ descripcion);
templateFile.setContents(template.marshal());
cmsObject.writeFile( templateFile);
out.println("Recurso: "+recurso.getRootPath().replace(cms.getRequestContext( ).getSiteRoot(),"")+ "actualizado
");
}}catch (Exception e){
}
%>