Estoy utilizando una gran biblioteca de código abierto y necesito generar subclases personales de algunas de las clases. ¿Cuáles son las mejores estrategias? Me gustaría mantener la biblioteca original inalterada y ser fácilmente capaz de reconfigurar cuando se actualice. Es poco probable que mi código valga la pena contribuir al proyecto (aunque me complace escribir de una manera que lo permita).subclases de una biblioteca de código abierto
El problema es general pero lo ilustraré con mi ejemplo. Estoy usando Apache PDFBox que tiene una rutina para escribir en java.awt.Graphics2D
. He reemplazado esto por el kit de herramientas Apache Batik que proporciona una subclase de Graphics2D (org.apache.batik.svggen.SVGGraphics2D
) para que pueda capturar la representación SVG. Puedo crear una instancia
public static org.apache.batik.svggen.SVGGraphics2D createSVG() {
org.w3c.dom.DOMImplementation domImpl =
org.apache.batik.dom.GenericDOMImplementation.getDOMImplementation();
org.w3c.dom.Document document =
domImpl.createDocument("http://www.w3.org/2000/svg", "svg", null);
return new org.apache.batik.svggen.SVGGraphics2D(document);
}
El lugar donde PDFBox utiliza los gráficos es org.apache.pdfbox.PDFReader
que he editado para permitir que los nuevos gráficos:
protected void showPage(int pageNumber)
{
try
{
PageDrawer drawer = new PageDrawer();
PageWrapper wrapper = new PageWrapper(this);
PDPage page = (PDPage)pages.get(pageNumber);
wrapper.displayPage(page);
PDRectangle cropBox = page.findCropBox();
Dimension drawDimension = cropBox.createDimension();
svg = PDFPagePanel.createSVG(); // MY EDIT!!!!!!!!!
drawer.drawPage(svg, page, drawDimension);
writeSVG(pageNumber);
}
catch (IOException exception)
{
exception.printStackTrace();
}
}
he conseguido que funcione (que no es el problema) . Mi preocupación es que he tenido que hackear/editar y volver a compilar varias clases de PDFBox distribuidas simplemente para generar y usar la subclase. Terminé con clases como PMRPDFReader en los mismos paquetes que la biblioteca. Es muy complicado: no recuerdo de inmediato dónde hice las ediciones, etc.
Creo que debería poder utilizar la biblioteca tal como está y simplemente agregar/vincular mis subclases. Uso maven así que tal vez haya una manera de excluir las clases originales.
+1 sugerencias útiles –