Package datasoul.servicelist

Source Code of datasoul.servicelist.ServiceListExporterDocument

/*
* Copyright 2005-2010 Samuel Mello
*
*   This program is free software; you can redistribute it and/or modify
*   it under the terms of the GNU General Public License as published by
*   the Free Software Foundation; version 2 or later of the License.
*
*   This program is distributed in the hope that it will be useful,
*   but WITHOUT ANY WARRANTY; without even the implied warranty of
*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*   GNU General Public License for more details.
*
*/

package datasoul.servicelist;

import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.regex.Matcher;

import javax.imageio.ImageIO;
import javax.swing.JOptionPane;

import com.lowagie.text.BadElementException;
import com.lowagie.text.Cell;
import com.lowagie.text.Chunk;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Element;
import com.lowagie.text.Font;
import com.lowagie.text.FontFactory;
import com.lowagie.text.Image;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Table;
import com.lowagie.text.pdf.PdfWriter;
import com.lowagie.text.rtf.RtfWriter2;

import datasoul.DatasoulMainForm;
import datasoul.serviceitems.ServiceItem;
import datasoul.serviceitems.song.Chord;
import datasoul.serviceitems.song.ChordShapePanel;
import datasoul.serviceitems.song.ChordsDB;
import datasoul.serviceitems.song.Song;
import datasoul.serviceitems.text.TextServiceItem;

/**
*
* @author samuel
*/
public class ServiceListExporterDocument {

    private Document document;
    public static final int TYPE_PDF = 0;
    public static final int TYPE_RTF = 1;

    private boolean exportGuitarTabs;
    private LinkedList<Paragraph> guitarTabs;
   
    public ServiceListExporterDocument(int type, String filename, boolean exportGuitarTabs) throws FileNotFoundException, DocumentException{
        document = new Document();
       
        // ensure file do not exist to avoid garbage at the end of the file
        File f = new File(filename);
        if (f.exists()){
            f.delete();
        }
       
        if (type == TYPE_RTF){
            RtfWriter2.getInstance(document, new FileOutputStream(filename));
        }else{
            PdfWriter w = PdfWriter.getInstance(document, new FileOutputStream(filename));
            w.setStrictImageSequence(true);
        }
        document.open();
        document.addCreator("Datasoul "+DatasoulMainForm.getVersion());
        document.addCreationDate();

        this.exportGuitarTabs = exportGuitarTabs;
        if (exportGuitarTabs){
            guitarTabs = new LinkedList<Paragraph>();
        }
    }
   
    public void write() {
        document.close();
    }
   
    public void addServicePlan() throws DocumentException{
       
        ServiceListTable slt = ServiceListTable.getActiveInstance();
       
        Paragraph p = new Paragraph(java.util.ResourceBundle.getBundle("datasoul/internationalize").getString("SERVICE PLAN"), FontFactory.getFont(FontFactory.HELVETICA, 12));
        p.setAlignment(Element.ALIGN_CENTER);
        document.add(p);
       
        p = new Paragraph(slt.getTitle(), FontFactory.getFont(FontFactory.HELVETICA_BOLD, 16));
        p.setAlignment(Element.ALIGN_CENTER);
        document.add(p);
       
        Table t = new Table(4);
        t.setWidths(new int[]{10,5, 50, 35});
        t.setPadding(2.0f);
        t.setWidth(100.0f);
       
        t.addCell(createHeaderCell(java.util.ResourceBundle.getBundle("datasoul/internationalize").getString("TIME")));
        t.addCell(createHeaderCell(java.util.ResourceBundle.getBundle("datasoul/internationalize").getString("MIN")));
        t.addCell(createHeaderCell(java.util.ResourceBundle.getBundle("datasoul/internationalize").getString("TITLE")));
        t.addCell(createHeaderCell(java.util.ResourceBundle.getBundle("datasoul/internationalize").getString("NOTES")));
       
       
        for (int i=0; i<slt.getRowCount(); i++){
           
            ServiceItem si = (ServiceItem) slt.getServiceItem(i);
            Cell c;

            // Start time
            c = new Cell(si.getStartTime());
            c.setMaxLines(1);
            c.setVerticalAlignment(Cell.ALIGN_MIDDLE);
            c.setHorizontalAlignment(Cell.ALIGN_CENTER);
            t.addCell(c);
           
            // Duration
            c = new Cell(Integer.toString(si.getDuration()));
            c.setMaxLines(1);
            c.setVerticalAlignment(Cell.ALIGN_MIDDLE);
            c.setHorizontalAlignment(Cell.ALIGN_RIGHT);
            t.addCell(c);
           
            // Title
            c = new Cell(si.getTitle());
            c.setVerticalAlignment(Cell.ALIGN_MIDDLE);
            t.addCell(c);

            // Notes
            c = new Cell(si.getNotes());
            c.setVerticalAlignment(Cell.ALIGN_MIDDLE);
            t.addCell(c);

        }
       
        document.add(t);
       
        p = new Paragraph(java.util.ResourceBundle.getBundle("datasoul/internationalize").getString("NOTES"), FontFactory.getFont(FontFactory.HELVETICA_BOLD));
        document.add(p);
       
        p = new Paragraph(slt.getNotes(), FontFactory.getFont(FontFactory.HELVETICA));
        p.setIndentationLeft(10.0f);
        document.add(p);

        document.newPage();
       
       
    }
   
   
    private Cell createHeaderCell(String text) throws BadElementException{

        Cell c = new Cell(new Chunk(text,FontFactory.getFont(FontFactory.HELVETICA_BOLD) ));
        c.setMaxLines(1);
        c.setHeader(true);
        c.setVerticalAlignment(Cell.ALIGN_MIDDLE);
        c.setHorizontalAlignment(Cell.ALIGN_CENTER);
        return c;

    }
   
    private void addSongHeader(Song s) throws DocumentException {
        Paragraph p;

        p = new Paragraph(s.getTitle(), FontFactory.getFont(FontFactory.HELVETICA_BOLD, 16));
        document.add(p);
       
        if (!s.getSongAuthor().trim().equals("")){
            p = new Paragraph(java.util.ResourceBundle.getBundle("datasoul/internationalize").getString("AUTHOR")+": "+s.getSongAuthor(), FontFactory.getFont(FontFactory.HELVETICA_BOLD));
            document.add(p);
        }
       
        if (!s.getCopyright().trim().equals("")){
            p = new Paragraph(java.util.ResourceBundle.getBundle("datasoul/internationalize").getString("COPYRIGHT")+s.getCopyright(), FontFactory.getFont(FontFactory.HELVETICA_BOLD));
            document.add(p);
        }

        if (!s.getSongSource().trim().equals("")){
            p = new Paragraph(java.util.ResourceBundle.getBundle("datasoul/internationalize").getString("SOURCE")+s.getSongSource(), FontFactory.getFont(FontFactory.HELVETICA_BOLD));
            document.add(p);
        }
       

       
    }
   
    public void addSongLyrics(Song s) throws DocumentException{

        addSongHeader(s);

        Paragraph p;

        p = new Paragraph("("+java.util.ResourceBundle.getBundle("datasoul/internationalize").getString("LYRICS")+")", FontFactory.getFont(FontFactory.HELVETICA, 8));
        document.add(p);
       
        String text = s.getText().replace(Song.CHORUS_MARK , "").replace(Song.SLIDE_BREAK, "");

        p = new Paragraph(" ", FontFactory.getFont(FontFactory.HELVETICA));
        document.add(p);
       
        p = new Paragraph(text, FontFactory.getFont(FontFactory.HELVETICA));
        document.add(p);
       
        document.newPage();
       
    }
   
    public void addTextItem(TextServiceItem t) throws DocumentException{

        String text = t.getText().replace(Song.CHORUS_MARK , "").replace(Song.SLIDE_BREAK, "");
       
        Paragraph p;
       
        p = new Paragraph(t.getTitle(), FontFactory.getFont(FontFactory.HELVETICA_BOLD, 16));
        document.add(p);

        p = new Paragraph(" ", FontFactory.getFont(FontFactory.HELVETICA));
        document.add(p);
       
        p = new Paragraph(text, FontFactory.getFont(FontFactory.HELVETICA));
        document.add(p);
       
        document.newPage();
    }
   
    public void addSongChordsSimple(Song s) throws DocumentException{

       
        // If we don't have the chords saved, skip it
        if (s.getChordsSimplified().trim().equals(""))
            return;
       
        addSongHeader(s);

        Paragraph p;

        p = new Paragraph("("+java.util.ResourceBundle.getBundle("datasoul/internationalize").getString("CHORDS SIMPLE")+")", FontFactory.getFont(FontFactory.HELVETICA, 8));
        document.add(p);

        p = new Paragraph(" ", FontFactory.getFont(FontFactory.HELVETICA));
        document.add(p);

        String text[] = s.getChordsSimplified().replace(Song.CHORUS_MARK , " ").replace(Song.SLIDE_BREAK, " ").split("\n");
       
        addSongChords(text);
       
        p = new Paragraph(" ", FontFactory.getFont(FontFactory.HELVETICA));
        document.add(p);

        if (exportGuitarTabs){
            p = new Paragraph(s.getTitle(), FontFactory.getFont(FontFactory.HELVETICA_BOLD));
            guitarTabs.add(p);

            p = new Paragraph("("+java.util.ResourceBundle.getBundle("datasoul/internationalize").getString("CHORDS COMPLETE")+")", FontFactory.getFont(FontFactory.HELVETICA, 8));
            guitarTabs.add(p);

            guitarTabs.addAll(addChordsShape(Song.getUsedChords(s.getChordsSimplified())));
        }

        document.newPage();
       
    }


    public void addSongChordsComplete(Song s) throws DocumentException{

       
        // If we don't have the chords saved, skip it
        if (s.getChordsComplete().trim().equals(""))
            return;
       
        addSongHeader(s);

        Paragraph p;

        p = new Paragraph("("+java.util.ResourceBundle.getBundle("datasoul/internationalize").getString("CHORDS COMPLETE")+")", FontFactory.getFont(FontFactory.HELVETICA, 8));
        document.add(p);
       
        p = new Paragraph(" ", FontFactory.getFont(FontFactory.HELVETICA));
        document.add(p);

        String text[] = s.getChordsComplete().replace(Song.CHORUS_MARK , " ").replace(Song.SLIDE_BREAK, " ").split("\n");
        addSongChords(text);

       
        p = new Paragraph(" ", FontFactory.getFont(FontFactory.HELVETICA));
        document.add(p);

        if (exportGuitarTabs){
            p = new Paragraph(s.getTitle(), FontFactory.getFont(FontFactory.HELVETICA_BOLD));
            guitarTabs.add(p);
            p = new Paragraph("("+java.util.ResourceBundle.getBundle("datasoul/internationalize").getString("CHORDS COMPLETE")+")", FontFactory.getFont(FontFactory.HELVETICA, 8));
            guitarTabs.add(p);
           
            guitarTabs.addAll(addChordsShape(Song.getUsedChords(s.getChordsComplete())));
        }
               
        document.newPage();
       
    }

    private LinkedList<Paragraph> addChordsShape(ArrayList<String> chordsName) throws DocumentException{
        ChordsDB chordsDB = ChordsDB.getInstance();
        String notCatalogued = "";
        LinkedList<Chunk> images = new LinkedList<Chunk>();
        LinkedList<File> filesToDelete = new LinkedList<File>();
        LinkedList<Paragraph> ret = new LinkedList<Paragraph>();

        for(int i=0; i<chordsName.size();i++){
            Chord chord = chordsDB.getChordByName(chordsName.get(i));
            if(chord!=null){
                ChordShapePanel csp = new ChordShapePanel(2, chord.getName(),chord.getShape());
                BufferedImage im = csp.createImage();
                try{
                    File tmp = File.createTempFile("datasoul-img", ".png");
                    tmp.deleteOnExit();
                    filesToDelete.add(tmp);
                   
                    ImageIO.write(im, "png", tmp);
                    Chunk c = new Chunk(Image.getInstance(tmp.getAbsolutePath()), 0, 0, false);
                    images.add(c);
                }catch(IOException e){
                    JOptionPane.showMessageDialog(null, java.util.ResourceBundle.getBundle("datasoul/internationalize").getString("INTERNAL ERROR: ")+e.getMessage());
                }
            }else{
                notCatalogued += chordsName.get(i);
            }
        }
       
        Paragraph p = new Paragraph();

        if (!images.isEmpty()){
            for (Chunk c : images){
                p.add(c);
            }
            p.setLeading(images.getFirst().getImage().getScaledHeight());
            p.setKeepTogether(true);
        }

        ret.add(p);
       
        if (!notCatalogued.equals("") ){
            p = new Paragraph(java.util.ResourceBundle.getBundle("datasoul/internationalize").getString("THE FOLLOWING CHORDS ARE NOT CATALOGED: ")+notCatalogued, FontFactory.getFont(FontFactory.HELVETICA, 8));
            ret.add(p);
        }

        for (File f : filesToDelete){
            try{
                f.delete();
            }catch(Exception e){
                //ignore, it will be deleted on exit
            }
        }

        return ret;
    }
   

    private void addSongChords(String[] text) throws DocumentException{
        Font chordfont  = new Font(Font.COURIER, 12, Font.BOLD, Color.BLUE.darker());
        Font lyricfont  = new Font(Font.COURIER, 12, Font.NORMAL);
        Paragraph p;

        for (String line : text){

            Matcher matcher = Song.CHORDS_REGEX_PATTERN.matcher(line);

            if (matcher.find()){
                if (line.startsWith("=")){
                    line = line.replaceFirst("=", " ");
                }
                p = new Paragraph(line, chordfont);
            }else{
                p = new Paragraph(line, lyricfont);
            }
            document.add(p);
        }
       
    }

    public void addGuitarTabs() throws DocumentException{

        document.newPage();

        Paragraph p = new Paragraph(java.util.ResourceBundle.getBundle("datasoul/internationalize").getString("GUITAR TABS"), FontFactory.getFont(FontFactory.HELVETICA_BOLD, 16));
        document.add(p);

        for (Paragraph p2 : guitarTabs){
            document.add(p2);
        }

    }
   
}

TOP

Related Classes of datasoul.servicelist.ServiceListExporterDocument

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.