/* * Copyright 2015 JBoss, by Red Hat, Inc * * 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 org.uberfire.ext.wires.core.client.factories; import com.ait.lienzo.client.core.shape.Group; import com.ait.lienzo.client.core.shape.Shape; import org.uberfire.ext.wires.core.api.factories.FactoryHelper; import org.uberfire.ext.wires.core.api.factories.ShapeDragProxy; import org.uberfire.ext.wires.core.api.factories.ShapeDragProxyCompleteCallback; import org.uberfire.ext.wires.core.api.factories.ShapeDragProxyPreviewCallback; import org.uberfire.ext.wires.core.api.factories.ShapeFactory; import org.uberfire.ext.wires.core.api.factories.ShapeGlyph; /** * Base implementation of a ShapeFactory to avoid unnecessary boiler-plate code */ public abstract class AbstractBaseFactory<T extends Shape<T>> implements ShapeFactory<T> { @Override public ShapeGlyph getGlyph() { final T shape = makeShape(); final Group group = new Group(); group.add(shape); return new ShapeGlyph() { @Override public Group getGroup() { return group; } @Override public double getWidth() { return AbstractBaseFactory.this.getWidth(); } @Override public double getHeight() { return AbstractBaseFactory.this.getHeight(); } }; } @Override public ShapeDragProxy getDragProxy(final @SuppressWarnings("unused") FactoryHelper helper, final ShapeDragProxyPreviewCallback dragPreviewCallback, final ShapeDragProxyCompleteCallback dragEndCallBack) { final T shape = makeShape(); final Group group = new Group(); group.add(shape); return new ShapeDragProxy() { @Override public Group getDragGroup() { return group; } @Override public void onDragPreview(final double x, final double y) { dragPreviewCallback.callback(x, y); } @Override public void onDragComplete(final double x, final double y) { dragEndCallBack.callback(x, y); } @Override public double getWidth() { return AbstractBaseFactory.this.getWidth(); } @Override public double getHeight() { return AbstractBaseFactory.this.getHeight(); } }; } protected abstract T makeShape(); protected abstract double getWidth(); protected abstract double getHeight(); }