LinearGradientTypeLoader.java :  » Rule-Engine » zilonis » org » zilonis » tool » ext » aerith » g2d » Java Open Source

Java Open Source » Rule Engine » zilonis 
zilonis » org » zilonis » tool » ext » aerith » g2d » LinearGradientTypeLoader.java
package org.zilonis.tool.ext.aerith.g2d;

import java.awt.Color;
import java.awt.LinearGradientPaint;
import java.util.Map;

import org.jdesktop.fuse.TypeLoader;
import org.jdesktop.fuse.TypeLoaderFactory;
import org.jdesktop.fuse.TypeLoadingException;

public class LinearGradientTypeLoader extends TypeLoader<LinearGradientPaint> {
    public LinearGradientTypeLoader() {
        super(LinearGradientPaint.class);
    }

    @Override
    public LinearGradientPaint loadType(String name, String value, Class<?> resolver, Map<String, Object> map) {
        String[] parts = value.split("\\s?\\|\\s?");
        if (parts.length < 4) {
            throw new TypeLoadingException("Theme resource " + name +
                                           " is not a valid gradient.");
        }

        String[] startPoint = parts[0].split(",");
        if (startPoint.length != 2) {
            throw new TypeLoadingException("Start point " + parts[0] +
                                           " is not valid in " + name);
        }
        float startX;
        try {
            startX = Float.parseFloat(startPoint[0]);
        } catch (NumberFormatException e) {
            throw new TypeLoadingException("Gradient start point is invalid in " + name + ".", e);
        }
        float startY;
        try {
            startY = Float.parseFloat(startPoint[1]);
        } catch (NumberFormatException e) {
            throw new TypeLoadingException("Gradient start point is invalid in " + name + ".", e);
        }

        String[] endPoint = parts[1].split(",");
        if (endPoint.length != 2) {
            throw new TypeLoadingException("Start point " + parts[1] +
                                           " is not valid in " + name);
        }

        float endX;
        try {
            endX = Float.parseFloat(endPoint[0]);
        } catch (NumberFormatException e) {
            throw new TypeLoadingException("Gradient end point is invalid in " + name + ".", e);
        }
        float endY;
        try {
            endY = Float.parseFloat(endPoint[1]);
        } catch (NumberFormatException e) {
            throw new TypeLoadingException("Gradient end point is invalid in " + name + ".", e);
        }

        float[] fractions = new float[parts.length - 2];
        Color[] colors = new Color[parts.length - 2];
        for (int i = 2; i < parts.length; i++) {
            String[] stop = parts[i].split(",");
            if (stop.length != 2) {
                throw new TypeLoadingException("Gradient stop " + parts[i] +
                                               " is not valid in " + name);
            }
            try {
                fractions[i - 2] = Float.parseFloat(stop[0]);
            } catch (NumberFormatException e) {
                throw new TypeLoadingException("Gradient stop is invalid in " + name + ".", e);
            }
            TypeLoader<?> loader = TypeLoaderFactory.getLoaderForType(Color.class);
            colors[i - 2] = (Color) loader.loadType("gradient stop", stop[1], resolver, null);
        }

        return new LinearGradientPaint(startX, startY, endX, endY,
                                       fractions, colors);
    }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.