Importing client side widget Code

Hi,

I am currently trying to implement graph drawing panel based on the SVG widget add on. I have defined a class AbstractVisionProcessorDrawable that contains topological information about a chips layout (name, centerbox, List of input connector pins, List of output connector pins).

import java.util.ArrayList;
import java.util.List;

import org.vaadin.gwtgraphics.client.Group;
import org.vaadin.gwtgraphics.client.VectorObject;

import com.example.vcweb.widgetset.client.DataModelEditorWidgetConfiguration.AlignType;
import com.example.vcweb.widgetset.client.VisionDataModelEditorWidget.ViewPortState;
import com.example.vcweb.widgetset.client.datamodel.EditTStampedType;
import com.example.vcweb.widgetset.client.datamodel.EditVisionElementType;
import com.example.vcweb.widgetset.client.drawable.def.Drawable;
import com.example.vcweb.widgetset.client.drawable.def.VisionProcessorDrawable;
import com.example.vcweb.widgetset.client.drawable.impl.ShapeWithTextDrawable.ShapeType;

public abstract class AbstractVisionProcessorDrawable extends AbstractVisionElementDrawable
        implements VisionProcessorDrawable {

    private static final long serialVersionUID = -9030853443096691747L;
    protected static final Point _pinMinDim = new Point(3, 1);

    protected List<EditTStampedType> _inputs;
    protected List<String> _inputNames;
    protected List<EditTStampedType> _outputs;
    protected List<String> _outputNames;

    private ShapeWithTextDrawable _chipDrawable;
    private List<ShapeWithTextDrawable> _inpPinDrawables;
    private List<ShapeWithTextDrawable> _outPinDrawables;

    private Group group = null;

    public AbstractVisionProcessorDrawable()
    {
        super();
    }

    public AbstractVisionProcessorDrawable(Point panelPos, long handleID, EditVisionElementType et,
            String name)
    {
        super(panelPos, handleID, et, name);



    }

When the panel containing the svg widget is created I also create (on the server side) an instance of this class and pass it through the panels state to the client side. However I was fighting some time with class loader errors and from my observation they are related to using objects
“org.vaadin.gwtgraphics.client.Group”
and
“org.vaadin.gwtgraphics.client.VectorObject”
inside the method, that constructs depending on the topological information and the viewport state (translation, zoom, etc) the actual dataModel to be painted by the SVG widget. See code below:

[code]
@Override
public VectorObject getVisibleShapes(ViewPortState vp, Point posFromParent) {

    VectorObject result = null;
    _panelLayoutBox.applyTransform(vp, posFromParent);
    Point[] bb = _panelLayoutBox.getScreenBounds();
    Point bbUL = bb[0]

;
Point bbLR = bb[1]
;

    int sizeX = vp.getScreenSizeX();
    int sizeY = vp.getScreenSizeY();

    if ((0 < bbUL._x && bbUL._x < sizeX && 0 < bbUL._y && bbUL._y < sizeY)
            || (0 < bbLR._x && bbLR._x < sizeX && 0 < bbLR._y && bbLR._y < sizeY))
    {

        if (group == null)
            group = new Group();
        else
            group.clear();

        VectorObject chipShape = _chipDrawable.getVisibleShapes(vp, posFromParent);
        group.add(chipShape);
        for (ShapeWithTextDrawable pinDrawable : _inpPinDrawables)
        {
            VectorObject inpShape = pinDrawable.getVisibleShapes(vp, posFromParent);
            group.add(inpShape);
        }
        for (ShapeWithTextDrawable poutDrawable : _outPinDrawables)
        {
            VectorObject inpShape = poutDrawable.getVisibleShapes(vp, posFromParent);
            group.add(inpShape);
        }
        result = group;
    }
    return result;

}

[/code]Now I thought I had solved this errors finally but yesterday I tried to also include the addon
VaadinContextMenu
and suddenly this types of errors reappeared, especifically:

java.lang.NoClassDefFoundError: com/google/gwt/event/shared/HasHandlers
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2895)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1173)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1681)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2895)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1173)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1681)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
at com.example.vcweb.uiserver.modellers.def.impl.VisionFunctionPresenter.createDrawable(VisionFunctionPresenter.java:41)
at com.example.vcweb.uiserver.modellers.def.impl.AbstractDrawableVisionElementNodePresenter.initWindow(AbstractDrawableVisionElementNodePresenter.java:25)
at com.example.vcweb.uiserver.modellers.AbstractPropertysetItemPresenter.showWindow(AbstractPropertysetItemPresenter.java:34)
at com.example.vcweb.uiserver.modellers.VisionDataModelPresenter.showNode(VisionDataModelPresenter.java:179)
at com.example.vcweb.uiserver.modellers.VisionDataModelPresenter.addNode(VisionDataModelPresenter.java:310)
at com.example.vcweb.uiserver.modellers.VisionDataModelPresenter.opSelected(VisionDataModelPresenter.java:159)
at com.example.vcweb.uiserver.modellers.visionTree.EditVisionTreeNode$VisionPopUpContent.lambda$2(EditVisionTreeNode.java:118)
at com.example.vcweb.uiserver.modellers.visionTree.EditVisionTreeNode$VisionPopUpContent$$Lambda$3/2039040841.buttonClick(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:508)
at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:198)
at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:161)
at com.vaadin.server.AbstractClientConnector.fireEvent(AbstractClientConnector.java:1008)
at com.vaadin.ui.Button.fireClick(Button.java:377)
at com.vaadin.ui.Button$1.click(Button.java:54)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:158)
at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:118)
at com.vaadin.server.communication.ServerRpcHandler.handleInvocation(ServerRpcHandler.java:437)
at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:408)
at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:273)
at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:90)
at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:41)
at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1414)
at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:365)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

I can clearly trace back, that the difference lies in
including or not including
in ivy.xml

or alternativly
removing all references to “org.vaadin.gwtgraphics.client.Group” and “org.vaadin.gwtgraphics.client.VectorObject” from the AbstractVisionProcessorDrawable class
.


Can someone please explain me as precise as possible what are the rules for referring to client side objects on server side code.
(not as member variable, not possible as local variable, generally no import of any client class)???

Also if it is generally not possible to refer to client side classes on the server side, what is the correct way to model a graphical application like this??? I can clearly remember that my first intent was to transfer my server side graph model to the client side and building the graphical representation there, but this forced me to expose the graph models classes in the widgetset/client directory. And this solution really didn’t appeal to me…


Any insights on this are really appreciated