All Downloads are FREE. Search and download functionalities are using the official Maven repository.

xworker.com.google.zxing.ZXingActions Maven / Gradle / Ivy

package xworker.com.google.zxing;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import ognl.OgnlException;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Composite;
import org.xmeta.ActionContext;
import org.xmeta.Thing;

import xworker.swt.design.Designer;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;

public class ZXingActions {
	public static Object run(ActionContext actionContext) throws WriterException, OgnlException, IOException{
		Thing self = (Thing) actionContext.get("self");
		
		String message = (String) self.doAction("getMessage", actionContext);
		BarcodeFormat barcodeFormat = getBarcodeFormat((String) self.doAction("getBarcodeFormat", actionContext));
		String outputFormat = (String) self.doAction("getOutputFormat", actionContext);
		
		MultiFormatWriter encoder = new MultiFormatWriter();
		BitMatrix bitMatrix = encoder.encode(message, barcodeFormat, 
				self.getInt("width", -1, actionContext), self.getInt("height", -1, actionContext));
		
		//输出类型
		Object output = self.doAction("getOutput", actionContext);
		OutputStream out = null;
		boolean closeOut = false;
		if(output instanceof OutputStream){
			out = (OutputStream) output;
		}else if(output instanceof File){
			out = new FileOutputStream((File) output);
			closeOut = true;
		}else if(output instanceof String){
			out = new FileOutputStream(new File((String) output));
			closeOut = true;
		}else{
			out = new ByteArrayOutputStream();
		}
		
		
		MatrixToImageWriter.writeToStream(bitMatrix, outputFormat, out);
		
		if(closeOut){
			out.close();
		}
		
		if(out instanceof ByteArrayOutputStream){
			return ((ByteArrayOutputStream) out).toByteArray();
		}else{			
			return null;
		}
	}
	
	public static Object create(ActionContext actionContext){
		Thing self = (Thing) actionContext.get("self");
		
		Composite parent = (Composite) actionContext.get("parent");
		Canvas canvas = new Canvas(parent, SWT.DOUBLE_BUFFERED);
		canvas.setBackground(canvas.getDisplay().getSystemColor(SWT.COLOR_WHITE));
		
		ZXingPainListener listener = new ZXingPainListener(canvas, self, actionContext);
		//canvas.addPaintListener(listener);
		canvas.addListener(SWT.Resize, listener);
		
		actionContext.peek().put("parent", canvas);
		for(Thing child : self.getChilds()){
			child.doAction("create", actionContext);			
		}
		
		Designer.attach(canvas, self.getMetadata().getPath(), actionContext);
		actionContext.getScope(0).put(self.getMetadata().getName(), listener);
		return canvas;
	}
	
	public static BarcodeFormat getBarcodeFormat(String format){
		if("AZTEC".equals(format)){
			return BarcodeFormat.AZTEC;
		}else if("CODABAR".equals(format)){
			return BarcodeFormat.CODABAR;
		}else if("CODE_128".equals(format)){
			return BarcodeFormat.CODE_128;
		}else if("CODE_39".equals(format)){
			return BarcodeFormat.CODE_39;
		}else if("CODE_93".equals(format)){
			return BarcodeFormat.CODE_93;
		}else if("DATA_MATRIX".equals(format)){
			return BarcodeFormat.DATA_MATRIX;
		}else if("EAN_13".equals(format)){
			return BarcodeFormat.EAN_13;
		}else if("EAN_8".equals(format)){
			return BarcodeFormat.EAN_8;
		}else if("ITF".equals(format)){
			return BarcodeFormat.ITF;
		}else if("MAXICODE".equals(format)){
			return BarcodeFormat.MAXICODE;
		}else if("PDF_417".equals(format)){
			return BarcodeFormat.PDF_417;
		}else if("QR_CODE".equals(format)){
			return BarcodeFormat.QR_CODE;
		}else if("RSS_14".equals(format)){
			return BarcodeFormat.RSS_14;
		}else if("RSS_EXPANDED".equals(format)){
			return BarcodeFormat.RSS_EXPANDED;
		}else if("UPC_A".equals(format)){
			return BarcodeFormat.UPC_A;
		}else if("UPC_E".equals(format)){
			return BarcodeFormat.UPC_E;
		}else if("UPC_EAN_EXTENSION".equals(format)){
			return BarcodeFormat.UPC_EAN_EXTENSION;
		}else{
			return BarcodeFormat.QR_CODE;
		}
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy