Java tutorial
/* * Copyright (c) 2017 Ahome' Innovation Technologies. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.ait.lienzo.test.stub; import com.ait.lienzo.client.core.Attribute; import com.ait.lienzo.client.core.config.LienzoCore; import com.ait.lienzo.client.core.event.AttributesChangedHandler; import com.ait.lienzo.client.core.event.AttributesChangedManager; import com.ait.lienzo.client.core.event.IAttributesChangedBatcher; import com.ait.lienzo.client.core.event.ImmediateAttributesChangedBatcher; import com.ait.lienzo.client.core.image.filter.ImageDataFilter; import com.ait.lienzo.client.core.shape.json.IJSONSerializable; import com.ait.lienzo.client.core.types.DashArray; import com.ait.lienzo.client.core.types.DragBounds; import com.ait.lienzo.client.core.types.FillGradient; import com.ait.lienzo.client.core.types.LinearGradient; import com.ait.lienzo.client.core.types.PatternGradient; import com.ait.lienzo.client.core.types.Point2D; import com.ait.lienzo.client.core.types.Point2DArray; import com.ait.lienzo.client.core.types.RadialGradient; import com.ait.lienzo.client.core.types.Shadow; import com.ait.lienzo.client.core.types.SpriteBehaviorMap; import com.ait.lienzo.client.core.types.Transform; import com.ait.lienzo.client.core.util.Geometry; import com.ait.lienzo.shared.core.types.ArrowType; import com.ait.lienzo.shared.core.types.Direction; import com.ait.lienzo.shared.core.types.DragConstraint; import com.ait.lienzo.shared.core.types.DragMode; import com.ait.lienzo.shared.core.types.EventPropagationMode; import com.ait.lienzo.shared.core.types.ImageSelectionMode; import com.ait.lienzo.shared.core.types.ImageSerializationMode; import com.ait.lienzo.shared.core.types.LineCap; import com.ait.lienzo.shared.core.types.LineJoin; import com.ait.lienzo.shared.core.types.TextAlign; import com.ait.lienzo.shared.core.types.TextBaseLine; import com.ait.lienzo.shared.core.types.TextUnit; import com.ait.lienzo.test.annotation.StubClass; import com.ait.tooling.common.api.java.util.StringOps; import com.ait.tooling.common.api.json.JSONType; import com.ait.tooling.nativetools.client.NObjectJSO; import com.ait.tooling.nativetools.client.NUtils; import com.ait.tooling.nativetools.client.collection.NFastDoubleArrayJSO; import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.core.client.JsArray; import com.google.gwt.core.client.JsArrayMixed; import com.google.gwt.event.shared.HandlerRegistration; /** * Due to use of inferred casting refactored. * * TODO: Not all "cast" method calls are still refactored. * TODO: Refactor -> Avoid doing this cast refactoring by using javassist setGenericSignatures and handling the castings via reflection at runtime. * * @author Roger Martinez * @since 1.0 * */ @StubClass("com.ait.lienzo.client.core.shape.Attributes") public class Attributes { private final IJSONSerializable<?> m_ser; private final NObjectJSO m_jso; private AttributesChangedManager m_man; private IAttributesChangedBatcher m_bat; public Attributes(final IJSONSerializable<?> ser) { m_ser = ser; m_jso = NObjectJSO.make(); } public Attributes(final JavaScriptObject jso, final IJSONSerializable<?> ser) { m_ser = ser; if ((null != jso) && (JSONType.OBJECT == NUtils.Native.getNativeTypeOfJSO(jso))) { m_jso = jso.cast(); } else { m_jso = NObjectJSO.make(); } } public final NObjectJSO getJSO() { return m_jso; } public final HandlerRegistration addAttributesChangedHandler(final Attribute attribute, final AttributesChangedHandler handler) { if ((null == attribute) || (null == handler)) { return null; } if (null != m_ser) { if (null == m_man) { m_man = new AttributesChangedManager(m_ser); } if (null == m_bat) { m_bat = new ImmediateAttributesChangedBatcher(); } return m_man.addAttributesChangedHandler(attribute, handler); } return null; } public final void cancelAttributesChangedBatcher() { if (null != m_bat) { m_bat.cancelAttributesChangedBatcher(); } } private final void checkDispatchAttributesChanged(final String name) { if ((null != m_man) && (null != m_ser) && (null != m_bat)) { if (m_man.canDispatchAttributesChanged(name)) { m_bat.bufferAttributeWithManager(name, m_man); } } } public final void setAttributesChangedBatcher(final IAttributesChangedBatcher bat) { if (null != bat) { m_bat = bat.copy(); } else { m_bat = new ImmediateAttributesChangedBatcher(); } } public final EventPropagationMode getEventPropagationMode() { return EventPropagationMode.lookup(getString(Attribute.EVENT_PROPAGATION_MODE.getProperty())); } public final void setEventPropagationMode(final EventPropagationMode mode) { if (null != mode) { put(Attribute.EVENT_PROPAGATION_MODE.getProperty(), mode.getValue()); } else { remove(Attribute.EVENT_PROPAGATION_MODE.getProperty()); } } public final boolean isClearLayerBeforeDraw() { if (isDefined(Attribute.CLEAR_LAYER_BEFORE_DRAW)) { return getBoolean(Attribute.CLEAR_LAYER_BEFORE_DRAW.getProperty()); } return true; } public final void setClearLayerBeforeDraw(final boolean clear) { put(Attribute.CLEAR_LAYER_BEFORE_DRAW.getProperty(), clear); } public final boolean isTransformable() { if (isDefined(Attribute.TRANSFORMABLE)) { return getBoolean(Attribute.TRANSFORMABLE.getProperty()); } return true; } public final void setTransformable(final boolean transformable) { put(Attribute.TRANSFORMABLE.getProperty(), transformable); } public final void setFillAlpha(double alpha) { if (alpha < 0) { alpha = 0; } else if (alpha > 1) { alpha = 1; } put(Attribute.FILL_ALPHA.getProperty(), alpha); } public final double getFillAlpha() { if (isNumber(Attribute.FILL_ALPHA.getProperty())) { double alpha = m_jso.getAsDouble(Attribute.FILL_ALPHA.getProperty()); if (alpha < 0) { alpha = 0; } else if (alpha > 1) { alpha = 1; } return alpha; } return 1; } public final void setStrokeAlpha(double alpha) { if (alpha < 0) { alpha = 0; } else if (alpha > 1) { alpha = 1; } put(Attribute.STROKE_ALPHA.getProperty(), alpha); } public final double getStrokeAlpha() { if (isNumber(Attribute.STROKE_ALPHA.getProperty())) { double alpha = m_jso.getAsDouble(Attribute.STROKE_ALPHA.getProperty()); if (alpha < 0) { alpha = 0; } else if (alpha > 1) { alpha = 1; } return alpha; } return 1; } public final void setFillColor(String fill) { if (null != (fill = StringOps.toTrimOrNull(fill))) { put(Attribute.FILL.getProperty(), fill); } else { remove(Attribute.FILL.getProperty()); } } public final String getFillColor() { return getString(Attribute.FILL.getProperty()); } public final void setFillGradient(final LinearGradient gradient) { if (null != gradient) { put(Attribute.FILL.getProperty(), gradient.getJSO()); } else { remove(Attribute.FILL.getProperty()); } } public final void setFillGradient(final RadialGradient gradient) { if (null != gradient) { put(Attribute.FILL.getProperty(), gradient.getJSO()); } else { remove(Attribute.FILL.getProperty()); } } public final void setFillGradient(final PatternGradient gradient) { if (null != gradient) { put(Attribute.FILL.getProperty(), gradient.getJSO()); } else { remove(Attribute.FILL.getProperty()); } } public final FillGradient getFillGradient() { final JavaScriptObject gjso = getObject(Attribute.FILL.getProperty()); if (null == gjso) { return null; } final FillGradient.GradientJSO fill = gjso.cast();// fix casts final String type = fill.getType(); if (LinearGradient.TYPE.equals(type)) { return new LinearGradient((LinearGradient.LinearGradientJSO) fill); } else if (RadialGradient.TYPE.equals(type)) { return new RadialGradient((RadialGradient.RadialGradientJSO) fill); } else if (PatternGradient.TYPE.equals(type)) { return new PatternGradient((PatternGradient.PatternGradientJSO) fill); } return null; } public final void setStrokeColor(String stroke) { if ((null != stroke) && (false == (stroke = stroke.trim()).isEmpty())) { put(Attribute.STROKE.getProperty(), stroke); } else { remove(Attribute.STROKE.getProperty()); } } public final String getStrokeColor() { return getString(Attribute.STROKE.getProperty()); } public final void setLineCap(final LineCap lineCap) { if (null != lineCap) { put(Attribute.LINE_CAP.getProperty(), lineCap.getValue()); } else { remove(Attribute.LINE_CAP.getProperty()); } } public final LineCap getLineCap() { return LineCap.lookup(getString(Attribute.LINE_CAP.getProperty())); } public final void setLineJoin(final LineJoin lineJoin) { if (null != lineJoin) { put(Attribute.LINE_JOIN.getProperty(), lineJoin.getValue()); } else { remove(Attribute.LINE_JOIN.getProperty()); } } public final LineJoin getLineJoin() { return LineJoin.lookup(getString(Attribute.LINE_JOIN.getProperty())); } public final void setMiterLimit(final double limit) { put(Attribute.MITER_LIMIT.getProperty(), limit); } public final double getMiterLimit() { return getDouble(Attribute.MITER_LIMIT.getProperty()); } public final void setStrokeWidth(final double width) { put(Attribute.STROKE_WIDTH.getProperty(), width); } public final double getStrokeWidth() { return getDouble(Attribute.STROKE_WIDTH.getProperty()); } public final void setX(final double x) { put(Attribute.X.getProperty(), x); } public final void setY(final double y) { put(Attribute.Y.getProperty(), y); } public final void setVisible(final boolean visible) { put(Attribute.VISIBLE.getProperty(), visible); } public final boolean isVisible() { if (isDefined(Attribute.VISIBLE)) { return getBoolean(Attribute.VISIBLE.getProperty()); } return true; } public final void setDraggable(final boolean draggable) { put(Attribute.DRAGGABLE.getProperty(), draggable); } public final boolean isDraggable() { return getBoolean(Attribute.DRAGGABLE.getProperty()); } public final void setEditable(final boolean editable) { put(Attribute.EDITABLE.getProperty(), editable); } public final boolean isEditable() { return getBoolean(Attribute.EDITABLE.getProperty()); } public final void setFillShapeForSelection(final boolean selection) { put(Attribute.FILL_SHAPE_FOR_SELECTION.getProperty(), selection); } public final boolean isFillShapeForSelection() { if (isDefined(Attribute.FILL_SHAPE_FOR_SELECTION)) { return getBoolean(Attribute.FILL_SHAPE_FOR_SELECTION.getProperty()); } return LienzoCore.get().getDefaultFillShapeForSelection(); } public final void setFillBoundsForSelection(final boolean selection) { put(Attribute.FILL_BOUNDS_FOR_SELECTION.getProperty(), selection); } public final boolean isFillBoundsForSelection() { if (isDefined(Attribute.FILL_BOUNDS_FOR_SELECTION)) { return getBoolean(Attribute.FILL_BOUNDS_FOR_SELECTION.getProperty()); } return false; } public final void setSelectionBoundsOffset(final double offset) { put(Attribute.SELECTION_BOUNDS_OFFSET.getProperty(), offset); } public final double getSelectionBoundsOffset() { if (isDefined(Attribute.SELECTION_BOUNDS_OFFSET)) { return getDouble(Attribute.SELECTION_BOUNDS_OFFSET.getProperty()); } return 0d; } public final void setSelectionStrokeOffset(final double offset) { put(Attribute.SELECTION_STROKE_OFFSET.getProperty(), offset); } public final double getSelectionStrokeOffset() { if (isDefined(Attribute.SELECTION_STROKE_OFFSET)) { return getDouble(Attribute.SELECTION_STROKE_OFFSET.getProperty()); } return 0d; } public final void setListening(final boolean listening) { put(Attribute.LISTENING.getProperty(), listening); } public final boolean isListening() { if (isDefined(Attribute.LISTENING)) { return getBoolean(Attribute.LISTENING.getProperty()); } return true; } public final void setName(final String name) { if (null != name) { put(Attribute.NAME.getProperty(), name); } else { remove(Attribute.NAME.getProperty()); } } public final void setDashArray(final DashArray array) { if (null != array) { put(Attribute.DASH_ARRAY.getProperty(), array.getJSO()); } else { remove(Attribute.DASH_ARRAY.getProperty()); } } public final DashArray getDashArray() { final JsArrayMixed dash = getArray(Attribute.DASH_ARRAY.getProperty()); if (null != dash) { final NFastDoubleArrayJSO djso = dash.cast(); return new DashArray(djso); } return new DashArray(); } public final void setDragConstraint(final DragConstraint constraint) { if (null != constraint) { put(Attribute.DRAG_CONSTRAINT.getProperty(), constraint.getValue()); } else { remove(Attribute.DRAG_CONSTRAINT.getProperty()); } } public final DragConstraint getDragConstraint() { return DragConstraint.lookup(getString(Attribute.DRAG_CONSTRAINT.getProperty())); } public final String getName() { return getString(Attribute.NAME.getProperty()); } public final void setID(final String id) { if (null != id) { put(Attribute.ID.getProperty(), id); } else { remove(Attribute.ID.getProperty()); } } public final String getID() { return getString(Attribute.ID.getProperty()); } public final void setRotation(final double radians) { put(Attribute.ROTATION.getProperty(), radians); } public final double getRotation() { return getDouble(Attribute.ROTATION.getProperty()); } public final void setRotationDegrees(final double degrees) { put(Attribute.ROTATION.getProperty(), Geometry.toRadians(degrees)); } public final double getRotationDegrees() { return Geometry.toDegrees(getDouble(Attribute.ROTATION.getProperty())); } public final void setRadius(final double radius) { put(Attribute.RADIUS.getProperty(), radius); } public final void setRadiusX(final double radiusX) { put(Attribute.RADIUS_X.getProperty(), radiusX); } public final void setRadiusY(final double radiusY) { put(Attribute.RADIUS_Y.getProperty(), radiusY); } public final void setCornerRadius(final double cornerRadius) { put(Attribute.CORNER_RADIUS.getProperty(), cornerRadius); } public final void setAlpha(double alpha) { if (alpha < 0) { alpha = 0; } if (alpha > 1) { alpha = 1; } put(Attribute.ALPHA.getProperty(), alpha); } public final void setScale(final Point2D scale) { if (null != scale) { put(Attribute.SCALE.getProperty(), scale.getJSO()); } else { remove(Attribute.SCALE.getProperty()); } } public final void setScale(final double scalex, final double scaley) { setScale(new Point2D(scalex, scaley)); } public final void setScale(final double value) { setScale(new Point2D(value, value)); } // Lienzo-mockito: Replaced use of "cast()" by just using java regular casting. public final Point2D getScale() { final Point2D.Point2DJSO pjso = (Point2D.Point2DJSO) m_jso.getAsJSO(Attribute.SCALE.getProperty()); if (null != pjso) { return new Point2D(pjso); } return null; } public final void setShear(final double shearX, final double shearY) { setShear(new Point2D(shearX, shearY)); } public final void setShear(final Point2D shear) { if (null != shear) { put(Attribute.SHEAR.getProperty(), shear.getJSO()); } else { remove(Attribute.SHEAR.getProperty()); } } // Lienzo-mockito: Replaced use of "cast()" by just using java regular casting. public final Point2D getShear() { final Point2D.Point2DJSO pjso = (Point2D.Point2DJSO) m_jso.getAsJSO(Attribute.SHEAR.getProperty()); if (null != pjso) { return new Point2D(pjso); } return null; } public final void setOffset(final Point2D offset) { if (null != offset) { put(Attribute.OFFSET.getProperty(), offset.getJSO()); } else { remove(Attribute.OFFSET.getProperty()); } } public final void setOffset(final double x, final double y) { setOffset(new Point2D(x, y)); } // Lienzo-mockito: Replaced use of "cast()" by just using java regular casting. public final Point2D getOffset() { final Point2D.Point2DJSO pjso = (Point2D.Point2DJSO) m_jso.getAsJSO(Attribute.OFFSET.getProperty()); if (null != pjso) { return new Point2D(pjso); } return null; } public final void setTransform(final Transform transform) { if (null != transform) { put(Attribute.TRANSFORM.getProperty(), transform.getJSO()); } else { remove(Attribute.TRANSFORM.getProperty()); } } // Lienzo-mockito: Replaced use of "cast()" by just using java regular casting. public final Transform getTransform() { final Transform.TransformJSO xrfm = (Transform.TransformJSO) m_jso .getAsJSO(Attribute.TRANSFORM.getProperty()); if (null != xrfm) { return new Transform(xrfm); } return null; } public final void setWidth(final double width) { put(Attribute.WIDTH.getProperty(), width); } public final void setHeight(final double height) { put(Attribute.HEIGHT.getProperty(), height); } public final void setMinWidth(final Double minWidth) { if (null != minWidth) { put(Attribute.MIN_WIDTH.getProperty(), minWidth); } else { remove(Attribute.MIN_WIDTH.getProperty()); } } public final void setMaxWidth(final Double maxWidth) { if (null != maxWidth) { put(Attribute.MAX_WIDTH.getProperty(), maxWidth); } else { remove(Attribute.MAX_WIDTH.getProperty()); } } public final void setMinHeight(final Double minHeight) { if (null != minHeight) { put(Attribute.MIN_HEIGHT.getProperty(), minHeight); } else { remove(Attribute.MIN_HEIGHT.getProperty()); } } public final void setMaxHeight(final Double maxHeight) { if (null != maxHeight) { put(Attribute.MAX_HEIGHT.getProperty(), maxHeight); } else { remove(Attribute.MAX_HEIGHT.getProperty()); } } public final void setPoints(final Point2DArray points) { if (null != points) { put(Attribute.POINTS.getProperty(), points.getJSO()); } else { remove(Attribute.POINTS.getProperty()); } } public final Point2DArray getPoints() { final JsArray<JavaScriptObject> points = getArrayOfJSO(Attribute.POINTS.getProperty()); if (null != points) { return new Point2DArray(points); } return new Point2DArray(); } public final void setStarPoints(int points) { if (points < 5) { points = 5; } put(Attribute.STAR_POINTS.getProperty(), points); } public final void setText(String text) { if (null == text) { text = ""; } put(Attribute.TEXT.getProperty(), text); } public final String getText() { String text = getString(Attribute.TEXT.getProperty()); if (null == text) { text = ""; } return text; } public final void setFontSize(double points) { if (points <= 0.0) { points = LienzoCore.get().getDefaultFontSize(); } put(Attribute.FONT_SIZE.getProperty(), points); } public final double getFontSize() { double points = getDouble(Attribute.FONT_SIZE.getProperty()); if (points <= 0.0) { points = LienzoCore.get().getDefaultFontSize(); } return points; } public final void setSkew(final double skew) { put(Attribute.SKEW.getProperty(), skew); } public final void setFontFamily(String family) { if ((null == family) || (family = family.trim()).isEmpty()) { put(Attribute.FONT_FAMILY.getProperty(), LienzoCore.get().getDefaultFontFamily()); } else { put(Attribute.FONT_FAMILY.getProperty(), family); } } public final String getFontFamily() { String family = getString(Attribute.FONT_FAMILY.getProperty()); if ((null == family) || (family = family.trim()).isEmpty()) { family = LienzoCore.get().getDefaultFontFamily(); } return family; } public final void setFontStyle(String style) { if ((null == style) || (style = style.trim()).isEmpty()) { put(Attribute.FONT_STYLE.getProperty(), LienzoCore.get().getDefaultFontStyle()); } else { put(Attribute.FONT_STYLE.getProperty(), style); } } public final String getFontStyle() { String style = getString(Attribute.FONT_STYLE.getProperty()); if ((null == style) || (style = style.trim()).isEmpty()) { style = LienzoCore.get().getDefaultFontStyle(); } return style; } public final void setTextBaseLine(final TextBaseLine baseline) { if (null != baseline) { put(Attribute.TEXT_BASELINE.getProperty(), baseline.getValue()); } else { remove(Attribute.TEXT_BASELINE.getProperty()); } } public final void setTextUnit(final TextUnit unit) { if (null != unit) { put(Attribute.TEXT_UNIT.getProperty(), unit.getValue()); } else { remove(Attribute.TEXT_UNIT.getProperty()); } } public final TextUnit getTextUnit() { return TextUnit.lookup(getString(Attribute.TEXT_UNIT.getProperty())); } public final void setTextAlign(final TextAlign textAlign) { if (null != textAlign) { put(Attribute.TEXT_ALIGN.getProperty(), textAlign.getValue()); } else { remove(Attribute.TEXT_ALIGN.getProperty()); } } public final TextBaseLine getTextBaseLine() { return TextBaseLine.lookup(getString(Attribute.TEXT_BASELINE.getProperty())); } public final TextAlign getTextAlign() { return TextAlign.lookup(getString(Attribute.TEXT_ALIGN.getProperty())); } public final void setShadow(final Shadow shadow) { if (null != shadow) { put(Attribute.SHADOW.getProperty(), shadow.getJSO()); } else { remove(Attribute.SHADOW.getProperty()); } } public final Shadow getShadow() { final JavaScriptObject shadow = getObject(Attribute.SHADOW.getProperty()); if (null != shadow) { final Shadow.ShadowJSO sjso = shadow.cast(); return new Shadow(sjso); } return null; } public final void setStartAngle(final double startAngle) { put(Attribute.START_ANGLE.getProperty(), startAngle); } public final void setEndAngle(final double endAngle) { put(Attribute.END_ANGLE.getProperty(), endAngle); } public final void setCounterClockwise(final boolean counterClockwise) { put(Attribute.COUNTER_CLOCKWISE.getProperty(), counterClockwise); } public final void setControlPoints(final Point2DArray controlPoints) { if (null != controlPoints) { put(Attribute.CONTROL_POINTS.getProperty(), controlPoints.getJSO()); } else { remove(Attribute.CONTROL_POINTS.getProperty()); } } // Lienzo-mockito: Replaced use of "cast()" by just using java regular casting. public final Point2DArray getControlPoints() { final Point2DArray.Point2DArrayJSO points = (Point2DArray.Point2DArrayJSO) m_jso .getAsJSO(Attribute.CONTROL_POINTS.getProperty()); if (null != points) { return new Point2DArray(points); } return new Point2DArray(); } public final double getX() { return getDouble(Attribute.X.getProperty()); } public final double getY() { return getDouble(Attribute.Y.getProperty()); } public final double getRadius() { return getDouble(Attribute.RADIUS.getProperty()); } public final double getRadiusX() { return getDouble(Attribute.RADIUS_X.getProperty()); } public final double getRadiusY() { return getDouble(Attribute.RADIUS_Y.getProperty()); } public final double getCornerRadius() { return getDouble(Attribute.CORNER_RADIUS.getProperty()); } public final double getWidth() { return getDouble(Attribute.WIDTH.getProperty()); } public final double getHeight() { return getDouble(Attribute.HEIGHT.getProperty()); } public final Double getMinWidth() { double minWidth = getDouble(Attribute.MIN_WIDTH.getProperty()); return minWidth == 0 ? null : minWidth; } public final Double getMaxWidth() { double maxWidth = getDouble(Attribute.MAX_WIDTH.getProperty()); return maxWidth == 0 ? null : maxWidth; } public final Double getMinHeight() { double minHeight = getDouble(Attribute.MIN_HEIGHT.getProperty()); return minHeight == 0 ? null : minHeight; } public final Double getMaxHeight() { double maxHeight = getDouble(Attribute.MAX_HEIGHT.getProperty()); return maxHeight == 0 ? null : maxHeight; } public final int getStarPoints() { int points = getInteger(Attribute.STAR_POINTS.getProperty()); if (points < 5) { points = 5; } return points; } public final int getSides() { int sides = getInteger(Attribute.SIDES.getProperty()); if (sides < 3) { sides = 3; } return sides; } public final void setSides(int sides) { if (sides < 3) { sides = 3; } put(Attribute.SIDES.getProperty(), sides); } public final double getStartAngle() { return getDouble(Attribute.START_ANGLE.getProperty()); } public final double getEndAngle() { return getDouble(Attribute.END_ANGLE.getProperty()); } public final boolean isCounterClockwise() { return getBoolean(Attribute.COUNTER_CLOCKWISE.getProperty()); } public final double getSkew() { return getDouble(Attribute.SKEW.getProperty()); } public final double getInnerRadius() { return getDouble(Attribute.INNER_RADIUS.getProperty()); } public final void setInnerRadius(final double radius) { put(Attribute.INNER_RADIUS.getProperty(), radius); } public final void setOuterRadius(final double radius) { put(Attribute.OUTER_RADIUS.getProperty(), radius); } public final double getOuterRadius() { return getDouble(Attribute.OUTER_RADIUS.getProperty()); } public final double getAlpha() { if (isNumber(Attribute.ALPHA.getProperty())) { double alpha = m_jso.getAsDouble(Attribute.ALPHA.getProperty()); if (alpha < 0) { alpha = 0; } else if (alpha > 1) { alpha = 1; } return alpha; } return 1; } public final void setOffset(final double xy) { setOffset(new Point2D(xy, xy)); } public final DragBounds getDragBounds() { final JavaScriptObject bounds = getObject(Attribute.DRAG_BOUNDS.getProperty()); if (null != bounds) { final DragBounds.DragBoundsJSO djso = bounds.cast(); return new DragBounds(djso); } return null; } public final void setDragBounds(final DragBounds bounds) { if (null != bounds) { put(Attribute.DRAG_BOUNDS.getProperty(), bounds.getJSO()); } else { remove(Attribute.DRAG_BOUNDS.getProperty()); } } public final DragMode getDragMode() { return DragMode.lookup(getString(Attribute.DRAG_MODE.getProperty())); } public final void setDragMode(final DragMode mode) { if (null != mode) { put(Attribute.DRAG_MODE.getProperty(), mode.getValue()); } else { remove(Attribute.DRAG_MODE.getProperty()); } } public final void setClippedImageStartX(final int clippedImageStartX) { put(Attribute.CLIPPED_IMAGE_START_X.getProperty(), clippedImageStartX); } public final int getClippedImageStartX() { return getInteger(Attribute.CLIPPED_IMAGE_START_X.getProperty()); } public final void setClippedImageStartY(final int clippedImageStartY) { put(Attribute.CLIPPED_IMAGE_START_Y.getProperty(), clippedImageStartY); } public final int getClippedImageStartY() { return getInteger(Attribute.CLIPPED_IMAGE_START_Y.getProperty()); } public final void setClippedImageWidth(final int clippedImageWidth) { put(Attribute.CLIPPED_IMAGE_WIDTH.getProperty(), clippedImageWidth); } public final int getClippedImageWidth() { return getInteger(Attribute.CLIPPED_IMAGE_WIDTH.getProperty()); } public final void setClippedImageHeight(final int clippedImageHeight) { put(Attribute.CLIPPED_IMAGE_HEIGHT.getProperty(), clippedImageHeight); } public final int getClippedImageHeight() { return getInteger(Attribute.CLIPPED_IMAGE_HEIGHT.getProperty()); } public final void setClippedImageDestinationWidth(final int clippedImageDestinationWidth) { put(Attribute.CLIPPED_IMAGE_DESTINATION_WIDTH.getProperty(), clippedImageDestinationWidth); } public final int getClippedImageDestinationWidth() { return getInteger(Attribute.CLIPPED_IMAGE_DESTINATION_WIDTH.getProperty()); } public final void setClippedImageDestinationHeight(final int clippedImageDestinationHeight) { put(Attribute.CLIPPED_IMAGE_DESTINATION_HEIGHT.getProperty(), clippedImageDestinationHeight); } public final int getClippedImageDestinationHeight() { return getInteger(Attribute.CLIPPED_IMAGE_DESTINATION_HEIGHT.getProperty()); } public final void setSerializationMode(final ImageSerializationMode mode) { if (null != mode) { put(Attribute.SERIALIZATION_MODE.getProperty(), mode.getValue()); } else { remove(Attribute.SERIALIZATION_MODE.getProperty()); } } public final ImageSerializationMode getSerializationMode() { return ImageSerializationMode.lookup(getString(Attribute.SERIALIZATION_MODE.getProperty())); } public final void setImageSelectionMode(final ImageSelectionMode mode) { if (null != mode) { put(Attribute.IMAGE_SELECTION_MODE.getProperty(), mode.getValue()); } else { remove(Attribute.IMAGE_SELECTION_MODE.getProperty()); } } public final ImageSelectionMode getImageSelectionMode() { return ImageSelectionMode.lookup(getString(Attribute.IMAGE_SELECTION_MODE.getProperty())); } public final void setBaseWidth(final double baseWidth) { put(Attribute.BASE_WIDTH.getProperty(), baseWidth); } public final double getBaseWidth() { return getDouble(Attribute.BASE_WIDTH.getProperty()); } public final void setHeadWidth(final double headWidth) { put(Attribute.HEAD_WIDTH.getProperty(), headWidth); } public final double getHeadWidth() { return getDouble(Attribute.HEAD_WIDTH.getProperty()); } public final void setArrowAngle(final double arrowAngle) { put(Attribute.ARROW_ANGLE.getProperty(), arrowAngle); } public final double getArrowAngle() { return getDouble(Attribute.ARROW_ANGLE.getProperty()); } public final void setBaseAngle(final double baseAngle) { put(Attribute.BASE_ANGLE.getProperty(), baseAngle); } public final double getBaseAngle() { return getDouble(Attribute.BASE_ANGLE.getProperty()); } public final void setArrowType(final ArrowType arrowType) { if (null != arrowType) { put(Attribute.ARROW_TYPE.getProperty(), arrowType.getValue()); } else { remove(Attribute.ARROW_TYPE.getProperty()); } } public final ArrowType getArrowType() { return ArrowType.lookup(getString(Attribute.ARROW_TYPE.getProperty())); } public final void setURL(final String url) { if (null != url) { put(Attribute.URL.getProperty(), url); } else { remove(Attribute.URL.getProperty()); } } public final String getURL() { return getString(Attribute.URL.getProperty()); } public final void setLoop(final boolean loop) { put(Attribute.LOOP.getProperty(), loop); } public final boolean isLoop() { return getBoolean(Attribute.LOOP.getProperty()); } public final void setPlaybackRate(final double rate) { put(Attribute.PLAYBACK_RATE.getProperty(), rate); } public final double getPlaybackRate() { if (isDefined(Attribute.PLAYBACK_RATE)) { return getDouble(Attribute.PLAYBACK_RATE.getProperty()); } return 1.0; } public final void setVolume(double volume) { if (volume > 1.0) { volume = 1.0; } else if (volume < 0.0) { volume = 0.0; } put(Attribute.VOLUME.getProperty(), volume); } public final double getVolume() { if (isNumber(Attribute.VOLUME.getProperty())) { double volume = m_jso.getAsDouble(Attribute.VOLUME.getProperty()); if (volume < 0) { volume = 0; } else if (volume > 1) { volume = 1; } return volume; } return 0.5; } public final void setAutoPlay(final boolean play) { put(Attribute.AUTO_PLAY.getProperty(), play); } public final boolean isAutoPlay() { return getBoolean(Attribute.AUTO_PLAY.getProperty()); } public final void setShowPoster(final boolean show) { put(Attribute.SHOW_POSTER.getProperty(), show); } public final boolean isShowPoster() { return getBoolean(Attribute.SHOW_POSTER.getProperty()); } public final double getCurveFactor() { if (isNumber(Attribute.CURVE_FACTOR.getProperty())) { double factor = m_jso.getAsDouble(Attribute.CURVE_FACTOR.getProperty()); if (factor <= 0) { factor = 0.5; } else if (factor > 1) { factor = 1; } return factor; } return 0.5; } public final void setCurveFactor(double factor) { if (factor <= 0) { factor = 0.5; } else if (factor > 1) { factor = 1; } put(Attribute.CURVE_FACTOR.getProperty(), factor); } public final double getAngleFactor() { if (isNumber(Attribute.ANGLE_FACTOR.getProperty())) { double factor = m_jso.getAsDouble(Attribute.ANGLE_FACTOR.getProperty()); if (factor < 0) { factor = 0; } else if (factor > 1) { factor = 1; } return factor; } return 0; } public final boolean getLineFlatten() { return getBoolean(Attribute.LINE_FLATTEN.getProperty()); } public final void setLineFlatten(final boolean flat) { put(Attribute.LINE_FLATTEN.getProperty(), flat); } public final void setAngleFactor(double factor) { if (factor < 0) { factor = 0; } else if (factor > 1) { factor = 1; } put(Attribute.ANGLE_FACTOR.getProperty(), factor); } public final void setTopWidth(final double topwidth) { put(Attribute.TOP_WIDTH.getProperty(), topwidth); } public final double getTopWidth() { return getDouble(Attribute.TOP_WIDTH.getProperty()); } public final void setBottomWidth(final double bottomwidth) { put(Attribute.BOTTOM_WIDTH.getProperty(), bottomwidth); } public final double getBottomWidth() { return getDouble(Attribute.BOTTOM_WIDTH.getProperty()); } public final void setDashOffset(final double offset) { put(Attribute.DASH_OFFSET.getProperty(), offset); } public final double getDashOffset() { return getDouble(Attribute.DASH_OFFSET.getProperty()); } public final void setHeadOffset(double offset) { if (offset < 0) { offset = 0; } put(Attribute.HEAD_OFFSET.getProperty(), offset); } public final double getHeadOffset() { if (isNumber(Attribute.HEAD_OFFSET.getProperty())) { final double offset = m_jso.getAsDouble(Attribute.HEAD_OFFSET.getProperty()); if (offset >= 0) { return offset; } } return 0; } public final void setHeadDirection(final Direction direction) { if (null != direction) { put(Attribute.HEAD_DIRECTION.getProperty(), direction.getValue()); } else { remove(Attribute.HEAD_DIRECTION.getProperty()); } } public final Direction getHeadDirection() { return Direction.lookup(getString(Attribute.HEAD_DIRECTION.getProperty())); } public final void setTailOffset(double offset) { if (offset < 0) { offset = 0; } put(Attribute.TAIL_OFFSET.getProperty(), offset); } public final double getTailOffset() { if (isNumber(Attribute.TAIL_OFFSET.getProperty())) { final double offset = m_jso.getAsDouble(Attribute.TAIL_OFFSET.getProperty()); if (offset >= 0) { return offset; } } return 0; } public final void setTailDirection(final Direction direction) { if (null != direction) { put(Attribute.TAIL_DIRECTION.getProperty(), direction.getValue()); } else { remove(Attribute.TAIL_DIRECTION.getProperty()); } } public final Direction getTailDirection() { return Direction.lookup(getString(Attribute.TAIL_DIRECTION.getProperty())); } public final void setCorrectionOffset(double offset) { if (offset < 0) { offset = LienzoCore.get().getDefaultConnectorOffset(); } put(Attribute.CORRECTION_OFFSET.getProperty(), offset); } public final double getCorrectionOffset() { if (isNumber(Attribute.CORRECTION_OFFSET.getProperty())) { final double offset = m_jso.getAsDouble(Attribute.CORRECTION_OFFSET.getProperty()); if (offset >= 0) { return offset; } } return LienzoCore.get().getDefaultConnectorOffset(); } public final boolean hasAnyTransformAttributes() { return hasAnyTransformAttributes(m_jso); } public final boolean hasComplexTransformAttributes() { return hasComplexTransformAttributes(m_jso); } public final boolean hasExtraStrokeAttributes() { return hasExtraStrokeAttributes(m_jso); } public final boolean hasShadow() { return hasShadow(m_jso); } public final boolean hasFill() { return hasFill(m_jso); } private static final native boolean hasAnyTransformAttributes(NObjectJSO jso) /*-{ return ((jso.x !== undefined) || (jso.y !== undefined) || (jso.rotation !== undefined) || (jso.scale !== undefined) || (jso.shear !== undefined)); }-*/; private static final native boolean hasComplexTransformAttributes(NObjectJSO jso) /*-{ return ((jso.rotation !== undefined) || (jso.scale !== undefined) || (jso.shear !== undefined)); }-*/; private static final native boolean hasExtraStrokeAttributes(NObjectJSO jso) /*-{ return ((jso.dashArray !== undefined) || (jso.lineJoin !== undefined) || (jso.lineCap !== undefined) || (jso.miterLimit !== undefined)); }-*/; private static final native boolean hasShadow(NObjectJSO jso) /*-{ return !!jso.shadow; }-*/; private static final native boolean hasFill(NObjectJSO jso) /*-{ return !!jso.fill; }-*/; public final void put(final String name, final String value) { m_jso.put(name, value); checkDispatchAttributesChanged(name); } public final void put(final String name, final int value) { m_jso.put(name, value); checkDispatchAttributesChanged(name); } public final void put(final String name, final double value) { m_jso.put(name, value); checkDispatchAttributesChanged(name); } public final void put(final String name, final boolean value) { m_jso.put(name, value); checkDispatchAttributesChanged(name); } public final void put(final String name, final JavaScriptObject value) { m_jso.put(name, value); checkDispatchAttributesChanged(name); } public final boolean isEmpty() { return m_jso.isEmpty(); } public final int getInteger(final String name) { if (isNumber(name)) { return m_jso.getAsInteger(name); } return 0; } public final double getDouble(final String name) { if (isNumber(name)) { return m_jso.getAsDouble(name); } return 0; } public final Point2D getPoint2D(final String name) { final Point2D.Point2DJSO pjso = (Point2D.Point2DJSO) m_jso.getAsJSO(name); if (null != pjso) { return new Point2D(pjso); } return null; } public final void putPoint2D(final String name, final Point2D point) { if (null != point) { put(name, point.getJSO()); } else { remove(name); } } public final void setPath(String path) { if ((null == path) || (path = path.trim()).isEmpty()) { remove(Attribute.PATH.getProperty()); } else { put(Attribute.PATH.getProperty(), path); } } public final String getPath() { String path = getString(Attribute.PATH.getProperty()); if ((null == path) || (path = path.trim()).isEmpty()) { return null; } return path; } public final void setSpriteBehaviorMap(final SpriteBehaviorMap smap) { if (null == smap) { remove(Attribute.SPRITE_BEHAVIOR_MAP.getProperty()); } else { put(Attribute.SPRITE_BEHAVIOR_MAP.getProperty(), smap.getJSO()); } } public final SpriteBehaviorMap getSpriteBehaviorMap() { final JavaScriptObject object = getObject(Attribute.SPRITE_BEHAVIOR_MAP.getProperty()); if (null != object) { final SpriteBehaviorMap.SpriteBehaviorMapJSO sjso = object.cast(); return new SpriteBehaviorMap(sjso); } return null; } public final void setSpriteBehavior(String behavior) { if ((null == behavior) || (behavior = behavior.trim()).isEmpty()) { remove(Attribute.SPRITE_BEHAVIOR.getProperty()); } else { put(Attribute.SPRITE_BEHAVIOR.getProperty(), behavior); } } public final String getSpriteBehavior() { String behavior = getString(Attribute.SPRITE_BEHAVIOR.getProperty()); if ((null == behavior) || (behavior = behavior.trim()).isEmpty()) { return null; } return behavior; } public final double getTickRate() { return getDouble(Attribute.TICK_RATE.getProperty()); } public final void setTickRate(final double rate) { put(Attribute.TICK_RATE.getProperty(), rate); } public final String getString(final String name) { if (isString(name)) { return m_jso.getAsString(name); } return null; } public final void setActive(final boolean active) { put(Attribute.ACTIVE.getProperty(), active); } public final boolean isActive() { if (isDefined(Attribute.ACTIVE)) { return this.getBoolean(Attribute.ACTIVE.getProperty()); } return true; } public final void setMatrix(final double... matrix) { final ImageDataFilter.FilterConvolveMatrix mjso = ImageDataFilter.FilterConvolveMatrix.make().cast(); for (int i = 0; i < matrix.length; i++) { mjso.push(matrix[i]); } setMatrix(mjso); } public final void setMatrix(final ImageDataFilter.FilterConvolveMatrix matrix) { put(Attribute.MATRIX.getProperty(), matrix); } public final ImageDataFilter.FilterConvolveMatrix getMatrix() { final JavaScriptObject mjso = getArray(Attribute.MATRIX.getProperty()); if (null != mjso) { return mjso.cast(); } return ImageDataFilter.FilterConvolveMatrix.make().cast(); } public final double getValue() { return getDouble(Attribute.VALUE.getProperty()); } public final void setValue(final double value) { put(Attribute.VALUE.getProperty(), value); } public final void setColor(final String color) { put(Attribute.COLOR.getProperty(), color); } public final String getColor() { return getString(Attribute.COLOR.getProperty()); } public final void setInverted(final boolean inverted) { put(Attribute.INVERTED.getProperty(), inverted); } public final boolean isInverted() { return getBoolean(Attribute.INVERTED.getProperty()); } public final double getGain() { return getDouble(Attribute.GAIN.getProperty()); } public final void setGain(final double gain) { put(Attribute.GAIN.getProperty(), gain); } public final double getBias() { return getDouble(Attribute.BIAS.getProperty()); } public final void setBias(final double bias) { put(Attribute.BIAS.getProperty(), bias); } public final boolean getBoolean(final String name) { if (isBoolean(name)) { return m_jso.getAsBoolean(name); } return false; } public final JavaScriptObject getObject(final String name) { if (isObject(name)) { return m_jso.getAsJSO(name); } return null; } public final JsArray<JavaScriptObject> getArrayOfJSO(final String name) { if (isArray(name)) { return m_jso.getAsJSO(name).cast(); } return null; } public final JsArrayMixed getArray(final String name) { if (isArray(name)) { return m_jso.getAsJSO(name).cast(); } return null; } public final boolean isNumber(final String name) { return m_jso.isNumber(name); } public final boolean isString(final String name) { return m_jso.isString(name); } public final boolean isBoolean(final String name) { return m_jso.isBoolean(name); } public final boolean isObject(final String name) { return m_jso.isObject(name); } public final boolean isArray(final String name) { return m_jso.isArray(name); } public final JSONType getNativeTypeOf(final String name) { return NUtils.Native.getNativeTypeOf(m_jso, name); } public final boolean isDefined(final Attribute attr) { return m_jso.isDefined(attr.getProperty()); } public final void remove(final String name) { m_jso.remove(name); checkDispatchAttributesChanged(name); } }