private static String getCssString()

in kit/src/main/java/com/oracle/javafx/scenebuilder/kit/editor/panel/css/CssValueConverter.java [233:338]


    private static String getCssString(String property, ParsedValue value) {

        // TODO : this method should be rewritten in a cleaner way...
        if (value == null) {
            return "null"; //NOI18N
        }

        // I don't like that but this is needed to only have a conversion for gradient.
        // The gradient.toString is much better than the ParsedValue.toString.
        if (value.getConverter() instanceof LinearGradientConverter
                || value.getConverter() instanceof PaintConverter.RadialGradientConverter) {

            try {
                @SuppressWarnings("unchecked")//NOI18N
                Object converted = value.getConverter().convert(value, null);

                return toCssString(converted);
            } catch (RuntimeException ex) {
            }
        }

        Object obj = value.getValue();
        if (obj instanceof ParsedValue) {
            return getCssString(property, (ParsedValue) obj);
        }
        StringBuilder builder = new StringBuilder();
        boolean isDerive = value.getConverter() instanceof DeriveColorConverter || value.getConverter() instanceof DeriveSizeConverter;
        boolean isLadder = value.getConverter() instanceof LadderConverter;
        if (isDerive) {
            builder.append("derive("); //NOI18N
        }
        if (isLadder) {
            builder.append("ladder("); //NOI18N
        }
        if (obj instanceof ParsedValue[]) {
            ParsedValue[] array = (ParsedValue[]) obj;
            boolean isArrayValue = false;
            if (array.length >= 1) {
                ParsedValue pval = array[0];
                Object val = null;
                if (pval != null) {
                    if (pval.getConverter() instanceof LinearGradientConverter
                            || pval.getConverter() instanceof PaintConverter.RadialGradientConverter) {
                        val = null;
                    } else {
                        val = pval.getValue();
                    }
                }
                isArrayValue = val != null && val.getClass().isArray();
            }
            boolean singleForEquality = singleForEquality(property) && !isArrayValue;
            StringBuilder b = new StringBuilder();
            if (singleForEquality) {
                String latest = null;
                boolean areEquals = true;
                List<String> values = new ArrayList<>(array.length);
                for (ParsedValue v : array) {
                    String current = getCssString(property, v);
                    values.add(current);
                    areEquals &= (latest == null || current.equals(latest));
                    latest = current;
                }
                if (areEquals) {
                    String val = values.get(0);
                    val = removeDotZeroPxPercent(val);
                    b.append(val);
                } else {
                    for (int i = 0; i < values.size(); i++) {
                        b.append(values.get(i));
                        if (i < array.length - 1) {
                            b.append(" "); //NOI18N
                        }
                    }
                }
            } else {
                for (int i = 0; i < array.length; i++) {
                    ParsedValue v = array[i];
                    String val = getCssString(property, v);
                    val = removeDotZeroPxPercent(val);
                    b.append(val);
                    if ((i < array.length - 1) && val.length() > 0) {
                        b.append(", "); //NOI18N
                    }
                }
            }

            builder.append(b.toString());
        } else {
            if (obj instanceof ParsedValue[][]) {
                ParsedValue[][] arr = (ParsedValue[][]) obj;
                for (int i = 0; i < arr.length; i++) {
                    String val = retrieveValue(property, arr[i]);
                    builder.append(val);
                    if ((i < arr.length - 1) && val.length() > 0) {
                        builder.append(", "); //NOI18N
                    }
                }
            } else {
                builder.append(retrieveValue(property, obj));
            }
        }
        if (isDerive || isLadder) {
            builder.append(")"); //NOI18N
        }
        return builder.toString();
    }