package uk.ac.bbsrc.tgac.miso.core.service.printing.schema.impl; import net.sourceforge.fluxion.spi.ServiceProvider; import org.apache.commons.codec.binary.Base64; import uk.ac.bbsrc.tgac.miso.core.data.Barcodable; import uk.ac.bbsrc.tgac.miso.core.factory.barcode.BarcodeLabelFactory; import uk.ac.bbsrc.tgac.miso.core.service.printing.factory.FileGeneratingBarcodeLabelFactory; import uk.ac.bbsrc.tgac.miso.core.service.printing.schema.BarcodableSchema; import java.io.File; import java.io.UnsupportedEncodingException; /** * Created with IntelliJ IDEA. * User: bianx * Date: 09/05/2013 * Time: 11:48 * To change this template use File | Settings | File Templates. */ @ServiceProvider public class BradyPlateBarcodeLabelSchema implements BarcodableSchema<File, Barcodable> { private BarcodeLabelFactory<File, Barcodable, BarcodableSchema<File, Barcodable>> barcodeLabelFactory = new FileGeneratingBarcodeLabelFactory<Barcodable>(); public String getName(){ return "bradyPlateBarcodeLabelSchema"; } private Barcodable barcodable; @Override public Class<Barcodable> isStateFor() { return Barcodable.class; //To change body of implemented methods use File | Settings | File Templates. } @Override public File getPrintableLabel(Barcodable barcodable) { return barcodeLabelFactory.getLabel(this, barcodable); } @Override public BarcodeLabelFactory getBarcodeLabelFactory() { return barcodeLabelFactory; } @Override public String getRawState(Barcodable barcodable) { StringBuilder sb = new StringBuilder(); try { String barcode = new String(Base64.encodeBase64(barcodable.getIdentificationBarcode().getBytes("UTF-8"))); String tagBarcode = barcodable.getLabelText(); String name = barcodable.getName(); sb.append("m m").append("\n"); sb.append("J").append("\n"); sb.append("S l1;0,0,12,15,38").append("\n"); sb.append("B 3,2,0,DATAMATRIX,0.2;").append(barcode).append("\n"); sb.append("B 17,1,0,DATAMATRIX+RECT,0.25;").append(barcode).append("\n"); sb.append("T 29,2,0,5,pt4;[DATE]").append("\n"); //shorten alias to fit on label if too long if (tagBarcode.length() >= 17) { tagBarcode = tagBarcode.substring(0, 15) + "..."; } sb.append("T 17,8,0,5,pt6;").append(tagBarcode).append("\n"); sb.append("T 17,11,0,5,pt6;").append(name).append("\n"); sb.append("A 1").append("\n"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return sb.toString(); } }