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();
}