Archive

Archives pour la catégorie ‘Source Code’

Function that get all the URL query fields names

28/01/2009
Commentaires fermés

function getFieldsFromURL() {
	var query = self.location.search;
	if(query.length > 0) {
		var str = query.substring(1);
		var list = new Array();
		var i = 0;
		for(;;++i) {
			var end = str.indexOf('=');
			if(end == -1) return (i == 0)?null:list;
			list[i] = unescape(str.substring(0, end));
			list[list[i]] = getFieldFromURL(list[i]);
			end = str.indexOf('&');
			if(end == -1) return (i == 0)?null:list;
			str = str.substring(end+1, str.length);
		}
	} else {
		return null;
	}
}

JavaScript

[Struts] Dowload Action

28/01/2009
Commentaires fermés

    /**
     * Download a Content.
     * @param mapping The action mapping
     * @param form The action form
     * @param request The requst
     * @param response The response
     * @return a valid struts mapping
     */
    public final ActionForward download(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request, final HttpServletResponse response) {
        byte[] content = request.getParameter("content");
        String fileName = request.getParameter("fileName");
        String fileContentType = request.getParameter("fileContentType");
        String view = request.getParameter("view");
        OutputStream out = null;
        try {
            response.setHeader("Pragma", "public");
            response.setHeader("Cache-Control", "max-age=1, must-revalidate");
            // This will ask the user to open or save the content (without it the browser will try to download it)
            if (!"true".toLowerCase().equals(view) || StringHelper.isEmpty(doc.getFileContentType())) {
                response.setHeader("Content-Disposition", "attachment; filename="+fileName);
            }
            response.setContentLength(content.length);
            if (!StringHelper.isEmpty(fileContentType)) {
                response.setContentType(fileContentType);
            } else {
                response.setContentType("application/octet-stream");
            }
            out = response.getOutputStream();
            out.write(content);
        } catch (Exception ex) {
            logger.error(ex.getMessage(), ex);
            return mapping.findForward(ERROR);
        } finally {
            if (out != null) {
                try {
                    out.flush();
                    out.close();
                } catch (Exception ex) {
                    logger.error(ex.getMessage(), ex);
                }
            }
        }
        return null;
    }

Java

[Struts] Populate Potential new Element in an array

28/01/2009
Commentaires fermés

    /**
     * Populate the bean prefix using request parameters.
     * @param request The HTTP request
     * @param form ..
     * @param arrayKey ..
     * @param arrayItemClazz ..
     */
    public static void getPotentialNewElement(final HttpServletRequest request, final Object beanForm, final String arrayKey, final Class arrayItemClazz) throws Exception {
        Object array = ReflectHelper.invokeGetter(beanForm, arrayKey);
        if (array.getClass().isArray()) {
            int offsetIndex = Array.getLength(array);
            Object newArrayElement = null;
            List getters = ReflectHelper.getGettersRecursivly(arrayItemClazz);
            do {
                for (Iterator iter = getters.iterator(); iter.hasNext();) {
                    Method getter = (Method) iter.next();
                    if (getter.getReturnType().getName().startsWith("java.lang.String")) {
                        String getterKey = ReflectHelper.getFieldName(getter);
                        String value = request.getParameter(arrayKey + "[" + offsetIndex + "]." + getter);
                        if (value != null) {
                            if (newArrayElement == null) {
                                newArrayElement = ReflectHelper.newInstance(arrayItemClazz.getName());
                            }
                            ReflectHelper.invokeSetter(newArrayElement, getterKey, value, String.class);
                        }
                    }
                }
                if (newArrayElement != null) {
                    Object newArray = Array.newInstance(arrayItemClazz, offsetIndex + 1);
                    for (int i = 0; i < offsetIndex; ++i) {
                        Array.set(newArray, i, Array.get(array, i));
                    }
                    offsetIndex++;
                    Array.set(newArray, offsetIndex, newArrayElement);
                }
            } while (newArrayElement != null);
        }
    }

Java

Serialisation Test de bon fonctionnement

28/01/2009
Commentaires fermés

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class TestMain {

	public static void main(String[] args) {
	    // construct test object
	    ObjectA originalObj = new ObjectA();

	    testSerialization(originalObj);

	}

	public static void testSerialization (Object originalObj)
	{
	    ObjectA extractedObj = null;

	    // serialize
	    ByteArrayOutputStream out = new ByteArrayOutputStream();
	    ObjectOutputStream oos;

	    System.out.println("Trying to serialize the object...");
		try {
			oos = new ObjectOutputStream(out);
			oos.writeObject(originalObj);
			oos.close();
			System.out.println("=>> Success.");
		} catch (IOException e) {
			System.err.println("=>> Failure: "+e.getMessage());
			e.printStackTrace();
			return;
		}

	    //deserialize
	    byte[] pickled = out.toByteArray();
	    InputStream in = new ByteArrayInputStream(pickled);
	    ObjectInputStream ois;

	    System.out.println("Trying to deserialize the object...");
		try {
			ois = new ObjectInputStream(in);
		    Object obj = ois.readObject();
		    extractedObj = (ObjectA) obj;
		    System.out.println("=>> Success.");
		} catch (IOException e) {
			System.err.println("=>> Failure: "+e.getMessage());
			return;
		} catch (ClassNotFoundException e) {
			System.err.println("=>> Failure: "+e.getMessage());
			e.printStackTrace();
			return;
		}

	    // test the result
	    System.out.println("Inuring that the extracted object is equal to the original one...");
	    if (!originalObj.equals(extractedObj)) {
	    	System.err.println("=>> Failure: Objects are not equals.");
	    	return;
	    } else {
	    	System.out.println("=>> Success.");
	    }
	  }
}

Java

Get list of sub packages

28/01/2009
Commentaires fermés

public static Package[] getSubPackages(Package pckg) throws IOException, ClassNotFoundException {
    // Translate the package name into an absolute path
    String name = "/" + pckg.getName().replace('.','/');

    // Get a File object for the package
    URL url = Launcher.class.getResource(name);
    File directory = new File(url.getFile());

    if (directory.exists()) {
        // Get the list of the files contained in the package
        File[] files = directory.listFiles();
        ArrayList pckgs = new ArrayList();
        for (int i=0; i<files.length;++i) {

            // we are only interested in .class files
            if (files[i].isDirectory()) {
                // removes the .class extension
                pckgs.add(Package.getPackage(pckg.getName()+"."+files[i].getName()));
            }
        }
        Package[] packages = new Package[pckgs.size()];
        for (int i=0; i<pckgs.size();++i) packages[i] = (Package)pckgs.get(i);
        return packages;
    } else {
        throw new IOException("Invalid directory: "+url);
    }
}    

Java

Print a debug message with the class name and line position

28/01/2009
Commentaires fermés

// Print a debug message with the class container name and the line position
public static void debug(String message) {
    try {
        throw new Throwable();
    } catch (Throwable th) {
        StackTraceElement elmt = th.getStackTrace()[1];
        System.out.println("[DEBUG] "+elmt.getClassName()+"."+elmt.getMethodName()+"("+elmt.getFileName()+":"+elmt.getLineNumber()+") # "+message);
    }
}

Java

[DnD] TransferableLabel extends TransferableObject

28/01/2009
Commentaires fermés

package com.pingus.dnd.transferables;

import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;
import java.util.ArrayList;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JLabel;

public class TransferableLabel extends TransferableObject {

    public TransferableLabel(final JLabel label, final DataFlavor[] acceptedFlavors, final Transferable defaultTransferableObject) {
        super(label, acceptedFlavors, defaultTransferableObject);
    }

    public TransferableLabel(final JLabel label, final ArrayList acceptedFlavors, final Transferable defaultTransferableObject) {
        super(label, acceptedFlavors, defaultTransferableObject);
    }

    public Object getTransferData(final DataFlavor flavor) throws UnsupportedFlavorException, IOException {
        if(flavor.equals(getPreferredFlavor())) {
            System.out.println("[TransferableLabel] <getTransferData> returning label");
            // Return JLabel
            return this.getObject();
        } else if(flavor.equals(DataFlavor.imageFlavor)) {
            System.out.println("[TransferableLabel] <getTransferData> returning ...");
            // Return Image
            Icon icon = ((JLabel)this.getObject()).getIcon();
            if (icon instanceof ImageIcon) {
                System.out.println("[TransferableLabel] <getTransferData> Image.");
                return ((ImageIcon) icon).getImage();
            }
        } else if(flavor.equals(DataFlavor.stringFlavor)) {
            System.out.println("[TransferableLabel] <getTransferData> returning label text");
            // Return label text
            return ((JLabel)this.getObject()).getText();
        } else if(flavor.equals(DataFlavor.getTextPlainUnicodeFlavor())) {
            return TransferableObject.exportAsInputStream(((JLabel)this.getObject()).getText(), flavor);
        }
        System.out.println("[TransferableLabel] <getTransferData> returning nothing");
        System.out.println("[TransferableLabel] <getTransferData> for flavor "+flavor);
        return super.getTransferData(flavor);
    }
}

Java

[DnD] LabelSelection class

28/01/2009
Commentaires fermés

package com.pingus.dnd.transferables.handlers;

import java.awt.Image;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;

import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.TransferHandler;

import com.pingus.dnd.transferables.TransferableLabel;
import com.pingus.dnd.transferables.TransferableObject;

public class LabelSelection extends TransferHandler {
    private static final DataFlavor[] STANDARD_FLAVORS = new DataFlavor[] {
        DataFlavor.imageFlavor,
        DataFlavor.stringFlavor,
        DataFlavor.getTextPlainUnicodeFlavor()
    };

    /**
     * Creates a new instance of TreeTransferHandler
     */
    public LabelSelection() {
        super();
    }

    public int getSourceActions(JComponent c) {
        return TransferHandler.COPY_OR_MOVE;
    }

    protected Transferable createTransferable(final JComponent component) {
        System.out.println("[LabelTransferHandler] <createTransferable>");
        if (component instanceof JLabel) {
            return new TransferableLabel((JLabel)component, STANDARD_FLAVORS, super.createTransferable(component));
            /*
            return new TransferableObject(component, STANDARD_FLAVORS, super.createTransferable(component)) {
                public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
                    if(flavor.equals(getPreferredFlavor())) {
                        System.out.println("[LabelTransferHandler] <createTransferable> [TransferableObject] <getTransferData> returning label");
                        // Return JLabel
                        return component;
                    } else if(flavor.equals(DataFlavor.imageFlavor)) {
                        System.out.println("[LabelTransferHandler] <createTransferable> [TransferableObject] <getTransferData> returning ...");
                        // Return Image
                        Icon icon = ((JLabel)component).getIcon();
                        if (icon instanceof ImageIcon) {
                            System.out.println("[LabelTransferHandler] <createTransferable> [TransferableObject] <getTransferData> Image.");
                            return ((ImageIcon) icon).getImage();
                        }
                    } else if(flavor.equals(DataFlavor.stringFlavor)) {
                        System.out.println("[LabelTransferHandler] <createTransferable> [TransferableObject] <getTransferData> returning label text");
                        // Return label text
                        return ((JLabel)component).getText();
                    } else if(flavor.equals(DataFlavor.getTextPlainUnicodeFlavor())) {
                        return this.exportAsInputStream(((JLabel)component).getText(), flavor);
                    }
                    System.out.println("[LabelTransferHandler] <createTransferable> [TransferableObject] <getTransferData> returning nothing");
                    System.out.println("[LabelTransferHandler] <createTransferable> [TransferableObject] <getTransferData> for flavor "+flavor);
                    return super.getTransferData(flavor);
                }
            };
            /**/
        }
        return new TransferableObject(component, STANDARD_FLAVORS, super.createTransferable(component));
    }

    public boolean importData(JComponent comp, Transferable t) {
        System.out.println("[LabelTransferHandler] <inportData>");
        if (comp instanceof JLabel) {
            JLabel label = (JLabel) comp;
            DataFlavor labelFlavor = new DataFlavor(comp.getClass(), comp.getClass().getName());
            try {
                if (t.isDataFlavorSupported(labelFlavor)) {
                    System.out.println("[LabelTransferHandler] Importing Label");
                    JLabel dropedObject = (JLabel) t.getTransferData(labelFlavor);
                    System.out.println("[LabelTransferHandler] Setting icon");
                    label.setIcon(dropedObject.getIcon());
                    System.out.println("[LabelTransferHandler] Setting text to " + dropedObject.getText());
                    label.setText(dropedObject.getText());
                    System.out.println("[LabelTransferHandler] Setting tool tip text to " + dropedObject.getToolTipText());
                    label.setToolTipText(dropedObject.getToolTipText());
                    System.out.println("[LabelTransferHandler] Repaint label");
                    label.repaint();
                    return true;
                } else if (t.isDataFlavorSupported(DataFlavor.imageFlavor)) {
                    System.out.println("[LabelTransferHandler] Importing Image ...");
                    Image image = (Image) t.getTransferData(DataFlavor.imageFlavor);
                    ImageIcon icon = new ImageIcon(image);
                    label.setIcon(icon);
                    return true;
                } else if (t.isDataFlavorSupported(DataFlavor.stringFlavor)) {
                    System.out.println("[LabelTransferHandler] Importing text ...");
                    String text = (String)t.getTransferData(DataFlavor.stringFlavor);
                    label.setText(text);
                    return true;
                } else if (t.isDataFlavorSupported(DataFlavor.getTextPlainUnicodeFlavor())) {
                    label.setText(TransferableObject.importAsInputStream(t));
                    return true;
                }
            } catch (RuntimeException ex) {
                ex.printStackTrace();
            } catch (UnsupportedFlavorException ex) {
                ex.printStackTrace();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        return super.importData(comp, t);
    }

    public boolean canImport(JComponent comp, DataFlavor flavor[]) {
        if (!(comp instanceof JLabel)) {
            return false;
        }
        for (int i=0; i<flavor.length; ++i) {
            for (int j=0; j<STANDARD_FLAVORS.length; ++j) {
                if (flavor[i].equals(STANDARD_FLAVORS[j])) {
                    return true;
                }
            }
        }
        System.out.println("[LabelSelection] <canImport> returning false");
        return false;
    }
}

Java

[DnD] TransferableObject class

28/01/2009
Commentaires fermés

package com.pingus.dnd.transferables;

import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;

public class TransferableObject implements Transferable {
    private Object obj;
    private DataFlavor thisFlavor;
    private ArrayList acceptedFlavors;
    private Transferable defaultTransferableObject;

    /**
     * Creates a new instance of TransferableObject
     */
    public TransferableObject(Object obj, DataFlavor[] acceptedFlavors, Transferable defaultTransferableObject) {
        super();
        this.obj = obj;
        this.acceptedFlavors = toArrayList(acceptedFlavors);
        this.thisFlavor = new DataFlavor(obj.getClass(), obj.getClass().getName());
        if(!this.acceptedFlavors.contains(thisFlavor)) this.acceptedFlavors.add(thisFlavor);
        this.defaultTransferableObject = defaultTransferableObject;
    }

    /**
     * Creates a new instance of TransferableObject
     */
    public TransferableObject(Object obj, ArrayList acceptedFlavors, Transferable defaultTransferableObject) {
        super();
        this.obj = obj;
        this.acceptedFlavors = acceptedFlavors;
        this.thisFlavor = new DataFlavor(obj.getClass(), obj.getClass().getName());
        if(!this.acceptedFlavors.contains(thisFlavor)) this.acceptedFlavors.add(thisFlavor);
        this.defaultTransferableObject = defaultTransferableObject;
    }

    public static ArrayList toArrayList(Object[] objects) {
        ArrayList list = new ArrayList(objects.length);
        for(int i=0; i<objects.length; ++i) {
            list.add(objects[i]);
        }
        return list;
    }

    public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
        System.out.println("[TransferableObject] <getTransferData> flavor: "+flavor);
        System.out.println("[TransferableObject] <getTransferData> thisFlavor: "+thisFlavor);
        if (flavor.equals(thisFlavor)) {
            return obj;
        }
        return this.defaultTransferableObject.getTransferData(flavor);
    }

    /**
     * @return Returns the object.
     */
    public Object getObject() {
        return this.obj;
    }

    public DataFlavor[] getTransferDataFlavors() {
        DataFlavor[] fl = new DataFlavor[acceptedFlavors.size()];
        for(int i=0; i<fl.length; ++i) {
            fl[i] = (DataFlavor)acceptedFlavors.get(i);
        }
        return fl;
    }

    public boolean isDataFlavorSupported(DataFlavor flavor) {
        return acceptedFlavors.contains(flavor);
    }

    /**
     * @return Returns the defaultTransferableObject.
     */
    public Transferable getDefaultTransferableObject() {
        return this.defaultTransferableObject;
    }

    /**
     * @return Returns the best Flavor of the transferable object.
     */
    public DataFlavor getPreferredFlavor() {
        return this.thisFlavor;
    }

    /**
     * Util method that transform text into InputStream using a given DataFlavor.
     * @param text   The String to be exported
     * @param flavor The DataFlavor that request the export.
     * @return An InputStream containing the <code>text</code>
     * @throws UnsupportedEncodingException ...
     */
    public static InputStream exportAsInputStream(String text, DataFlavor flavor) throws UnsupportedEncodingException {
        String charset = flavor.getMimeType().replaceFirst(".*charset=", "");
        System.out.println("[TransferableObject] <exportAsInputStream>  Charset: "+charset);
        return new ByteArrayInputStream(text.getBytes(charset));
    }

    /**
     * Util method that transform the transferable object from TextPlainUnicode to String.
     * @param transferable The transferable object to be imported.
     * @return The String representation of the transferable as TextPlainUnicode.
     * @throws UnsupportedFlavorException ...
     * @throws IOException ...
     */
    public static String importAsInputStream(Transferable transferable) throws UnsupportedFlavorException, IOException {
        BufferedReader sr = new BufferedReader(DataFlavor.getTextPlainUnicodeFlavor().getReaderForText(transferable));
        String line = null;
        String plainText = "";
        while((line = sr.readLine()) != null) {
            plainText += line;
        }
        return plainText;
    }
}

Java

Run a Groovy script from a java class

28/01/2009
Commentaires fermés

import java.io.File;

import groovy.lang.Binding;
import groovy.util.GroovyScriptEngine;

public class GroovyRunner {
    /**
     * Usage: GroovyRunner [groovy file]
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {
        if(args.length == 1) {
            File groovyFile = new File(args[0]);
            String[] roots = new String[] {groovyFile.getParentFile().getAbsolutePath()};
            GroovyScriptEngine gse = new GroovyScriptEngine(roots);
            Binding binding = new Binding();
            binding.setVariable("args", roots);
            gse.run(groovyFile.getName(), binding);
        } else {
            System.out.println("usage: "+GroovyRunner.class.getName()+" [groovy file]");
        }
    }
}

Java