1 /* 2 * Copyright (c) 2012, 2014, Oracle and/or its affiliates. 3 * All rights reserved. Use is subject to license terms. 4 * 5 * This file is available and licensed under the following license: 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 11 * - Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * - Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in 15 * the documentation and/or other materials provided with the distribution. 16 * - Neither the name of Oracle Corporation nor the names of its 17 * contributors may be used to endorse or promote products derived 18 * from this software without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 23 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 24 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 25 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 */ 32 package com.oracle.javafx.scenebuilder.kit.editor.job; 33 34 import com.oracle.javafx.scenebuilder.kit.fxom.FXOMDocument; 35 import com.oracle.javafx.scenebuilder.kit.fxom.FXOMInstance; 36 import com.oracle.javafx.scenebuilder.kit.fxom.FXOMProperty; 37 import com.oracle.javafx.scenebuilder.kit.fxom.FXOMPropertyC; 38 import com.oracle.javafx.scenebuilder.kit.metadata.Metadata; 39 import com.oracle.javafx.scenebuilder.kit.metadata.klass.ComponentClassMetadata; 40 import com.oracle.javafx.scenebuilder.kit.metadata.property.PropertyMetadata; 41 import com.oracle.javafx.scenebuilder.kit.metadata.property.value.BooleanPropertyMetadata; 42 import com.oracle.javafx.scenebuilder.kit.metadata.property.value.DoublePropertyMetadata; 43 import com.oracle.javafx.scenebuilder.kit.metadata.property.value.EnumerationPropertyMetadata; 44 import com.oracle.javafx.scenebuilder.kit.metadata.util.PropertyName; 45 46 /** 47 * This class defines getter and setter on FXOM objects without using the modify job. 48 * Theses methods are used by jobs that creates new FXOM objects and sets some of their properties. 49 * No need to use a job in this case as the undo action will remove the new added FXOM object. 50 */ 51 public class JobUtils { 52 53 public static void addColumnConstraints( 54 final FXOMDocument fxomDocument, 55 final FXOMInstance gridPane, 56 final FXOMInstance constraints, int index) { 57 final PropertyName propertyName = new PropertyName("columnConstraints"); //NOI18N 58 FXOMProperty property = gridPane.getProperties().get(propertyName); 59 if (property == null) { 60 property = new FXOMPropertyC(fxomDocument, propertyName); 61 } 62 if (property.getParentInstance() == null) { 63 property.addToParentInstance(-1, gridPane); 64 } 65 assert property instanceof FXOMPropertyC; 66 constraints.addToParentProperty(index, (FXOMPropertyC) property); 67 } 68 69 public static void addRowConstraints( 70 final FXOMDocument fxomDocument, 71 final FXOMInstance gridPane, 72 final FXOMInstance constraints, int index) { 73 final PropertyName propertyName = new PropertyName("rowConstraints"); //NOI18N 74 FXOMProperty property = gridPane.getProperties().get(propertyName); 75 if (property == null) { 76 property = new FXOMPropertyC(fxomDocument, propertyName); 77 } 78 if (property.getParentInstance() == null) { 79 property.addToParentInstance(-1, gridPane); 80 } 81 assert property instanceof FXOMPropertyC; 82 constraints.addToParentProperty(index, (FXOMPropertyC) property); 83 } 84 85 public static boolean getFillHeight( 86 final FXOMInstance instance, final Class<?> clazz) { 87 assert instance != null && clazz != null; 88 assert clazz.isAssignableFrom(instance.getDeclaredClass()); 89 final PropertyMetadata propertyMeta 90 = getPropertyMetadata(clazz, "fillHeight"); //NOI18N 91 assert propertyMeta instanceof BooleanPropertyMetadata; 92 return ((BooleanPropertyMetadata) propertyMeta).getValue(instance); 93 } 94 95 public static void setFillHeight( 96 final FXOMInstance instance, final Class<?> clazz, final boolean value) { 97 assert instance != null && clazz != null; 98 assert clazz.isAssignableFrom(instance.getDeclaredClass()); 99 final PropertyMetadata propertyMeta 100 = getPropertyMetadata(clazz, "fillHeight"); //NOI18N 101 assert propertyMeta instanceof BooleanPropertyMetadata; 102 ((BooleanPropertyMetadata) propertyMeta).setValue(instance, value); 103 } 104 105 public static boolean getFillWidth( 106 final FXOMInstance instance, final Class<?> clazz) { 107 assert instance != null && clazz != null; 108 assert clazz.isAssignableFrom(instance.getDeclaredClass()); 109 final PropertyMetadata propertyMeta 110 = getPropertyMetadata(clazz, "fillWidth"); //NOI18N 111 assert propertyMeta instanceof BooleanPropertyMetadata; 112 return ((BooleanPropertyMetadata) propertyMeta).getValue(instance); 113 } 114 115 public static void setFillWidth( 116 final FXOMInstance instance, final Class<?> clazz, final boolean value) { 117 assert instance != null && clazz != null; 118 assert clazz.isAssignableFrom(instance.getDeclaredClass()); 119 final PropertyMetadata propertyMeta 120 = getPropertyMetadata(clazz, "fillWidth"); //NOI18N 121 assert propertyMeta instanceof BooleanPropertyMetadata; 122 ((BooleanPropertyMetadata) propertyMeta).setValue(instance, value); 123 } 124 125 public static String getHAlignment( 126 final FXOMInstance instance, final Class<?> clazz) { 127 assert instance != null && clazz != null; 128 assert clazz.isAssignableFrom(instance.getDeclaredClass()); 129 final PropertyName propertyName = new PropertyName("halignment"); //NOI18N 130 final FXOMProperty property = instance.getProperties().get(propertyName); 131 if (property == null) { 132 return null; 133 } else { 134 final PropertyMetadata propertyMeta 135 = getPropertyMetadata(clazz, "halignment"); //NOI18N 136 assert propertyMeta instanceof EnumerationPropertyMetadata; 137 return ((EnumerationPropertyMetadata) propertyMeta).getValue(instance); 138 } 139 } 140 141 public static void setHAlignment( 142 final FXOMInstance instance, final Class<?> clazz, final String value) { 143 assert instance != null && clazz != null; 144 assert clazz.isAssignableFrom(instance.getDeclaredClass()); 145 final PropertyMetadata propertyMeta 146 = getPropertyMetadata(clazz, "halignment"); //NOI18N 147 assert propertyMeta instanceof EnumerationPropertyMetadata; 148 if (value != null) { 149 ((EnumerationPropertyMetadata) propertyMeta).setValue(instance, value); 150 } 151 } 152 153 public static String getHGrow( 154 final FXOMInstance instance, final Class<?> clazz) { 155 assert instance != null && clazz != null; 156 assert clazz.isAssignableFrom(instance.getDeclaredClass()); 157 final PropertyName propertyName = new PropertyName("hgrow"); //NOI18N 158 final FXOMProperty property = instance.getProperties().get(propertyName); 159 if (property == null) { 160 return null; 161 } else { 162 final PropertyMetadata propertyMeta 163 = getPropertyMetadata(clazz, "hgrow"); //NOI18N 164 assert propertyMeta instanceof EnumerationPropertyMetadata; 165 return ((EnumerationPropertyMetadata) propertyMeta).getValue(instance); 166 } 167 } 168 169 public static void setHGrow( 170 final FXOMInstance instance, final Class<?> clazz, final String value) { 171 assert instance != null && clazz != null; 172 assert clazz.isAssignableFrom(instance.getDeclaredClass()); 173 final PropertyMetadata propertyMeta 174 = getPropertyMetadata(clazz, "hgrow"); //NOI18N 175 assert propertyMeta instanceof EnumerationPropertyMetadata; 176 if (value != null) { 177 ((EnumerationPropertyMetadata) propertyMeta).setValue(instance, value); 178 } 179 } 180 181 public static void setLayoutX( 182 final FXOMInstance instance, final Class<?> clazz, final double value) { 183 assert instance != null && clazz != null; 184 assert clazz.isAssignableFrom(instance.getDeclaredClass()); 185 final PropertyMetadata propertyMeta 186 = getPropertyMetadata(clazz, "layoutX"); //NOI18N 187 assert propertyMeta instanceof DoublePropertyMetadata; 188 ((DoublePropertyMetadata) propertyMeta).setValue(instance, value); 189 } 190 191 public static void setLayoutY( 192 final FXOMInstance instance, final Class<?> clazz, final double value) { 193 assert instance != null && clazz != null; 194 assert clazz.isAssignableFrom(instance.getDeclaredClass()); 195 final PropertyMetadata propertyMeta 196 = getPropertyMetadata(clazz, "layoutY"); //NOI18N 197 assert propertyMeta instanceof DoublePropertyMetadata; 198 ((DoublePropertyMetadata) propertyMeta).setValue(instance, value); 199 } 200 201 public static double getMaxHeight( 202 final FXOMInstance instance, final Class<?> clazz) { 203 assert instance != null && clazz != null; 204 assert clazz.isAssignableFrom(instance.getDeclaredClass()); 205 final PropertyMetadata propertyMeta 206 = getPropertyMetadata(clazz, "maxHeight"); //NOI18N 207 assert propertyMeta instanceof DoublePropertyMetadata; 208 return ((DoublePropertyMetadata) propertyMeta).getValue(instance); 209 } 210 211 public static void setMaxHeight( 212 final FXOMInstance instance, final Class<?> clazz, final double value) { 213 assert instance != null && clazz != null; 214 assert clazz.isAssignableFrom(instance.getDeclaredClass()); 215 final PropertyMetadata propertyMeta 216 = getPropertyMetadata(clazz, "maxHeight"); //NOI18N 217 assert propertyMeta instanceof DoublePropertyMetadata; 218 ((DoublePropertyMetadata) propertyMeta).setValue(instance, value); 219 } 220 221 public static double getMaxWidth( 222 final FXOMInstance instance, final Class<?> clazz) { 223 assert instance != null && clazz != null; 224 assert clazz.isAssignableFrom(instance.getDeclaredClass()); 225 final PropertyMetadata propertyMeta 226 = getPropertyMetadata(clazz, "maxWidth"); //NOI18N 227 assert propertyMeta instanceof DoublePropertyMetadata; 228 return ((DoublePropertyMetadata) propertyMeta).getValue(instance); 229 } 230 231 public static void setMaxWidth( 232 final FXOMInstance instance, final Class<?> clazz, final double value) { 233 assert instance != null && clazz != null; 234 assert clazz.isAssignableFrom(instance.getDeclaredClass()); 235 final PropertyMetadata propertyMeta 236 = getPropertyMetadata(clazz, "maxWidth"); //NOI18N 237 assert propertyMeta instanceof DoublePropertyMetadata; 238 ((DoublePropertyMetadata) propertyMeta).setValue(instance, value); 239 } 240 241 public static double getMinHeight( 242 final FXOMInstance instance, final Class<?> clazz) { 243 assert instance != null && clazz != null; 244 assert clazz.isAssignableFrom(instance.getDeclaredClass()); 245 final PropertyMetadata propertyMeta 246 = getPropertyMetadata(clazz, "minHeight"); //NOI18N 247 assert propertyMeta instanceof DoublePropertyMetadata; 248 return ((DoublePropertyMetadata) propertyMeta).getValue(instance); 249 } 250 251 public static void setMinHeight( 252 final FXOMInstance instance, final Class<?> clazz, final double value) { 253 assert instance != null && clazz != null; 254 assert clazz.isAssignableFrom(instance.getDeclaredClass()); 255 final PropertyMetadata propertyMeta 256 = getPropertyMetadata(clazz, "minHeight"); //NOI18N 257 assert propertyMeta instanceof DoublePropertyMetadata; 258 ((DoublePropertyMetadata) propertyMeta).setValue(instance, value); 259 } 260 261 public static double getMinWidth( 262 final FXOMInstance instance, final Class<?> clazz) { 263 assert instance != null && clazz != null; 264 assert clazz.isAssignableFrom(instance.getDeclaredClass()); 265 final PropertyMetadata propertyMeta 266 = getPropertyMetadata(clazz, "minWidth"); //NOI18N 267 assert propertyMeta instanceof DoublePropertyMetadata; 268 return ((DoublePropertyMetadata) propertyMeta).getValue(instance); 269 } 270 271 public static void setMinWidth( 272 final FXOMInstance instance, final Class<?> clazz, final double value) { 273 assert instance != null && clazz != null; 274 assert clazz.isAssignableFrom(instance.getDeclaredClass()); 275 final PropertyMetadata propertyMeta 276 = getPropertyMetadata(clazz, "minWidth"); //NOI18N 277 assert propertyMeta instanceof DoublePropertyMetadata; 278 ((DoublePropertyMetadata) propertyMeta).setValue(instance, value); 279 } 280 281 public static void setOrientation( 282 final FXOMInstance instance, final Class<?> clazz, final String value) { 283 assert instance != null && clazz != null; 284 assert clazz.isAssignableFrom(instance.getDeclaredClass()); 285 final PropertyMetadata propertyMeta 286 = getPropertyMetadata(clazz, "orientation"); //NOI18N 287 assert propertyMeta instanceof EnumerationPropertyMetadata; 288 if (value != null) { 289 ((EnumerationPropertyMetadata) propertyMeta).setValue(instance, value); 290 } 291 } 292 293 public static double getPercentHeight( 294 final FXOMInstance instance, final Class<?> clazz) { 295 assert instance != null && clazz != null; 296 assert clazz.isAssignableFrom(instance.getDeclaredClass()); 297 final PropertyMetadata propertyMeta 298 = getPropertyMetadata(clazz, "percentHeight"); //NOI18N 299 assert propertyMeta instanceof DoublePropertyMetadata; 300 return ((DoublePropertyMetadata) propertyMeta).getValue(instance); 301 } 302 303 public static void setPercentHeight( 304 final FXOMInstance instance, final Class<?> clazz, final double value) { 305 assert instance != null && clazz != null; 306 assert clazz.isAssignableFrom(instance.getDeclaredClass()); 307 final PropertyMetadata propertyMeta 308 = getPropertyMetadata(clazz, "percentHeight"); //NOI18N 309 assert propertyMeta instanceof DoublePropertyMetadata; 310 ((DoublePropertyMetadata) propertyMeta).setValue(instance, value); 311 } 312 313 public static double getPercentWidth( 314 final FXOMInstance instance, final Class<?> clazz) { 315 assert instance != null && clazz != null; 316 assert clazz.isAssignableFrom(instance.getDeclaredClass()); 317 final PropertyMetadata propertyMeta 318 = getPropertyMetadata(clazz, "percentWidth"); //NOI18N 319 assert propertyMeta instanceof DoublePropertyMetadata; 320 return ((DoublePropertyMetadata) propertyMeta).getValue(instance); 321 } 322 323 public static void setPercentWidth( 324 final FXOMInstance instance, final Class<?> clazz, final double value) { 325 assert instance != null && clazz != null; 326 assert clazz.isAssignableFrom(instance.getDeclaredClass()); 327 final PropertyMetadata propertyMeta 328 = getPropertyMetadata(clazz, "percentWidth"); //NOI18N 329 assert propertyMeta instanceof DoublePropertyMetadata; 330 ((DoublePropertyMetadata) propertyMeta).setValue(instance, value); 331 } 332 333 public static double getPrefHeight( 334 final FXOMInstance instance, final Class<?> clazz) { 335 assert instance != null && clazz != null; 336 assert clazz.isAssignableFrom(instance.getDeclaredClass()); 337 final PropertyMetadata propertyMeta 338 = getPropertyMetadata(clazz, "prefHeight"); //NOI18N 339 assert propertyMeta instanceof DoublePropertyMetadata; 340 return ((DoublePropertyMetadata) propertyMeta).getValue(instance); 341 } 342 343 public static void setPrefHeight( 344 final FXOMInstance instance, final Class<?> clazz, final double value) { 345 assert instance != null && clazz != null; 346 assert clazz.isAssignableFrom(instance.getDeclaredClass()); 347 final PropertyMetadata propertyMeta 348 = getPropertyMetadata(clazz, "prefHeight"); //NOI18N 349 assert propertyMeta instanceof DoublePropertyMetadata; 350 ((DoublePropertyMetadata) propertyMeta).setValue(instance, value); 351 } 352 353 public static void setPrefViewportHeight( 354 final FXOMInstance instance, final Class<?> clazz, final double value) { 355 assert instance != null && clazz != null; 356 assert clazz.isAssignableFrom(instance.getDeclaredClass()); 357 final PropertyMetadata propertyMeta 358 = getPropertyMetadata(clazz, "prefViewportHeight"); //NOI18N 359 assert propertyMeta instanceof DoublePropertyMetadata; 360 ((DoublePropertyMetadata) propertyMeta).setValue(instance, value); 361 } 362 363 public static void setPrefViewportWidth( 364 final FXOMInstance instance, final Class<?> clazz, final double value) { 365 assert instance != null && clazz != null; 366 assert clazz.isAssignableFrom(instance.getDeclaredClass()); 367 final PropertyMetadata propertyMeta 368 = getPropertyMetadata(clazz, "prefViewportWidth"); //NOI18N 369 assert propertyMeta instanceof DoublePropertyMetadata; 370 ((DoublePropertyMetadata) propertyMeta).setValue(instance, value); 371 } 372 373 public static double getPrefWidth( 374 final FXOMInstance instance, final Class<?> clazz) { 375 assert instance != null && clazz != null; 376 assert clazz.isAssignableFrom(instance.getDeclaredClass()); 377 final PropertyMetadata propertyMeta 378 = getPropertyMetadata(clazz, "prefWidth"); //NOI18N 379 assert propertyMeta instanceof DoublePropertyMetadata; 380 return ((DoublePropertyMetadata) propertyMeta).getValue(instance); 381 } 382 383 public static void setPrefWidth( 384 final FXOMInstance instance, final Class<?> clazz, final double value) { 385 assert instance != null && clazz != null; 386 assert clazz.isAssignableFrom(instance.getDeclaredClass()); 387 final PropertyMetadata propertyMeta 388 = getPropertyMetadata(clazz, "prefWidth"); //NOI18N 389 assert propertyMeta instanceof DoublePropertyMetadata; 390 ((DoublePropertyMetadata) propertyMeta).setValue(instance, value); 391 } 392 393 public static String getVAlignment( 394 final FXOMInstance instance, final Class<?> clazz) { 395 assert instance != null && clazz != null; 396 assert clazz.isAssignableFrom(instance.getDeclaredClass()); 397 final PropertyName propertyName = new PropertyName("valignment"); //NOI18N 398 final FXOMProperty property = instance.getProperties().get(propertyName); 399 if (property == null) { 400 return null; 401 } else { 402 final PropertyMetadata propertyMeta 403 = getPropertyMetadata(clazz, "valignment"); //NOI18N 404 assert propertyMeta instanceof EnumerationPropertyMetadata; 405 return ((EnumerationPropertyMetadata) propertyMeta).getValue(instance); 406 } 407 } 408 409 public static void setVAlignment( 410 final FXOMInstance instance, final Class<?> clazz, final String value) { 411 assert instance != null && clazz != null; 412 assert clazz.isAssignableFrom(instance.getDeclaredClass()); 413 final PropertyMetadata propertyMeta 414 = getPropertyMetadata(clazz, "valignment"); //NOI18N 415 assert propertyMeta instanceof EnumerationPropertyMetadata; 416 if (value != null) { 417 ((EnumerationPropertyMetadata) propertyMeta).setValue(instance, value); 418 } 419 } 420 421 public static String getVGrow( 422 final FXOMInstance instance, final Class<?> clazz) { 423 assert instance != null && clazz != null; 424 assert clazz.isAssignableFrom(instance.getDeclaredClass()); 425 final PropertyName propertyName = new PropertyName("vgrow"); //NOI18N 426 final FXOMProperty property = instance.getProperties().get(propertyName); 427 if (property == null) { 428 return null; 429 } else { 430 final PropertyMetadata propertyMeta 431 = getPropertyMetadata(clazz, "vgrow"); //NOI18N 432 assert propertyMeta instanceof EnumerationPropertyMetadata; 433 return ((EnumerationPropertyMetadata) propertyMeta).getValue(instance); 434 } 435 } 436 437 public static void setVGrow( 438 final FXOMInstance instance, final Class<?> clazz, final String value) { 439 assert instance != null && clazz != null; 440 assert clazz.isAssignableFrom(instance.getDeclaredClass()); 441 final PropertyMetadata propertyMeta 442 = getPropertyMetadata(clazz, "vgrow"); //NOI18N 443 assert propertyMeta instanceof EnumerationPropertyMetadata; 444 if (value != null) { 445 ((EnumerationPropertyMetadata) propertyMeta).setValue(instance, value); 446 } 447 } 448 449 // Returns a String with no trailing zero; if decimal part is non zero then 450 // it is kept. 451 public static String getStringFromDouble(double value) { 452 String res = Double.toString(value); 453 if(res.endsWith(".0")) { //NOI18N 454 res = Integer.toString((int)value); 455 } 456 return res; 457 } 458 459 /* 460 * Private 461 */ 462 private static PropertyMetadata getPropertyMetadata( 463 final Class<?> componentClass, final String name) { 464 465 final ComponentClassMetadata componentClassMetadata 466 = Metadata.getMetadata().queryComponentMetadata(componentClass); 467 final PropertyName propertyName = new PropertyName(name); 468 return componentClassMetadata.lookupProperty(propertyName); 469 } 470 }