diff --git a/pom.xml b/pom.xml index 99051e151a..5a92ccd05f 100644 --- a/pom.xml +++ b/pom.xml @@ -53,7 +53,7 @@ 2.5.0 2.5.0 3.7.4 - 28.1-jre + 33.0.0-jre 2.8.0 2.10.4 3.12.0 @@ -61,7 +61,7 @@ 1.9.0 2.10.1 2.1.1e - 3.4.0 + 3.5.3 1.4 0.8.7 1.0.3 @@ -78,9 +78,11 @@ 3.4.1 0.7.2 1.4 - 3.4 + 5.2.0 2.5.3 - 1.30 + 2.2 + 15.4 + 2.15.3 yyyy-MM-dd diff --git a/ugs-core/pom.xml b/ugs-core/pom.xml index ac6186c4c0..bcf77eed90 100644 --- a/ugs-core/pom.xml +++ b/ugs-core/pom.xml @@ -117,7 +117,7 @@ org.openjdk.nashorn nashorn-core - 15.4 + ${ugs.nashorn-core.version} diff --git a/ugs-core/src/com/willwinder/universalgcodesender/StatusPollTimer.java b/ugs-core/src/com/willwinder/universalgcodesender/StatusPollTimer.java index fec6151b81..d3bf8f3d49 100644 --- a/ugs-core/src/com/willwinder/universalgcodesender/StatusPollTimer.java +++ b/ugs-core/src/com/willwinder/universalgcodesender/StatusPollTimer.java @@ -118,7 +118,7 @@ public void receivedStatus() { */ public void setUpdateInterval(int updateInterval) { this.updateInterval = Math.max(updateInterval, 10); - if (timer.isRunning()) { + if (timer != null && timer.isRunning()) { stop(); start(); } diff --git a/ugs-core/src/com/willwinder/universalgcodesender/model/GUIBackend.java b/ugs-core/src/com/willwinder/universalgcodesender/model/GUIBackend.java index 2f5d250297..914b1723a9 100644 --- a/ugs-core/src/com/willwinder/universalgcodesender/model/GUIBackend.java +++ b/ugs-core/src/com/willwinder/universalgcodesender/model/GUIBackend.java @@ -697,7 +697,7 @@ public void applySettingsToController(Settings settings, IController controller) .append(Localization.getString("firmware.feature.linesToArc")).append(NEW_LINE) .append(Localization.getString("firmware.feature.statusUpdates")).append(NEW_LINE) .append(Localization.getString("firmware.feature.statusUpdateRate")); - + logger.log(Level.SEVERE, "Could not load firmware settings", ex); throw new Exception(message.toString(), ex); } } diff --git a/ugs-core/test/com/willwinder/universalgcodesender/AbstractControllerTest.java b/ugs-core/test/com/willwinder/universalgcodesender/AbstractControllerTest.java index 983ab5f83d..924cec28d1 100644 --- a/ugs-core/test/com/willwinder/universalgcodesender/AbstractControllerTest.java +++ b/ugs-core/test/com/willwinder/universalgcodesender/AbstractControllerTest.java @@ -33,8 +33,18 @@ This file is part of Universal Gcode Sender (UGS). import com.willwinder.universalgcodesender.utils.SimpleGcodeStreamReader; import org.apache.commons.io.FileUtils; import org.easymock.EasyMock; +import static org.easymock.EasyMock.anyObject; +import static org.easymock.EasyMock.anyString; +import static org.easymock.EasyMock.eq; +import static org.easymock.EasyMock.expect; +import static org.easymock.EasyMock.expectLastCall; +import static org.easymock.EasyMock.or; +import static org.easymock.EasyMock.replay; +import static org.easymock.EasyMock.reset; +import static org.easymock.EasyMock.verify; import org.easymock.IMockBuilder; import org.junit.AfterClass; +import static org.junit.Assert.assertEquals; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; @@ -42,15 +52,12 @@ This file is part of Universal Gcode Sender (UGS). import java.io.File; import java.io.IOException; -import static org.easymock.EasyMock.*; -import static org.junit.Assert.assertEquals; - /** * * @author wwinder */ public class AbstractControllerTest { - + private AbstractCommunicator mockCommunicator; private ControllerListener mockListener; private MessageService mockMessageService; @@ -68,9 +75,8 @@ public void init() throws IllegalArgumentException { mockMessageService = EasyMock.createMock(MessageService.class); gcodeCreator = new DefaultCommandCreator(); - IMockBuilder instanceBuilder = EasyMock - .createMockBuilder(AbstractController.class) - .addMockedMethods( + IMockBuilder instanceBuilder = EasyMock.createMockBuilder(AbstractController.class); + instanceBuilder.addMockedMethods( "closeCommBeforeEvent", "closeCommAfterEvent", "openCommAfterEvent", @@ -134,7 +140,7 @@ private void streamInstanceExpectUtility() throws Exception { private void startStreamExpectation(String port, int rate) throws Exception { openInstanceExpectUtility(port, rate); streamInstanceExpectUtility(); - + // Making sure the commands get queued. mockCommunicator.queueStreamForComm(anyObject(IGcodeStreamReader.class)); expect(expectLastCall()).times(1); @@ -172,7 +178,7 @@ public void testQueueCommand() throws Exception { openInstanceExpectUtility(port, rate); streamInstanceExpectUtility(); - + // Making sure the commands get queued. mockCommunicator.queueStreamForComm(anyObject(IGcodeStreamReader.class)); expect(expectLastCall()).times(1); @@ -200,7 +206,7 @@ public void testQueueCommands() throws Exception { openInstanceExpectUtility(port, rate); streamInstanceExpectUtility(); - + // Making sure the commands get queued. mockCommunicator.queueStreamForComm(anyObject(IGcodeStreamReader.class)); expect(expectLastCall()).times(1); diff --git a/ugs-core/test/com/willwinder/universalgcodesender/StatusPollTimerTest.java b/ugs-core/test/com/willwinder/universalgcodesender/StatusPollTimerTest.java new file mode 100644 index 0000000000..4183bb3f36 --- /dev/null +++ b/ugs-core/test/com/willwinder/universalgcodesender/StatusPollTimerTest.java @@ -0,0 +1,26 @@ +package com.willwinder.universalgcodesender; + +import static org.junit.Assert.assertEquals; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +public class StatusPollTimerTest { + private StatusPollTimer statusPollTimer; + + @Mock + private IController controller; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + statusPollTimer = new StatusPollTimer(controller); + } + + @Test + public void setUpdateIntervalShouldSetTheIntervalWhenTimerIsNotRunning() { + statusPollTimer.setUpdateInterval(100); + assertEquals(100, statusPollTimer.getUpdateInterval()); + } +} \ No newline at end of file diff --git a/ugs-pendant/pom.xml b/ugs-pendant/pom.xml index 497bbf229d..d51de3b123 100644 --- a/ugs-pendant/pom.xml +++ b/ugs-pendant/pom.xml @@ -85,17 +85,17 @@ com.fasterxml.jackson.core jackson-databind - 2.15.3 + ${ugs.jackson.version} com.fasterxml.jackson.core jackson-annotations - 2.15.3 + ${ugs.jackson.version} com.fasterxml.jackson.core jackson-core - 2.15.3 + ${ugs.jackson.version} diff --git a/ugs-platform/ugs-platform-visualizer/src/main/java/com/willwinder/ugs/nbm/visualizer/JOGLGearsDemo.java b/ugs-platform/ugs-platform-visualizer/src/main/java/com/willwinder/ugs/nbm/visualizer/JOGLGearsDemo.java deleted file mode 100644 index 3eaa70a559..0000000000 --- a/ugs-platform/ugs-platform-visualizer/src/main/java/com/willwinder/ugs/nbm/visualizer/JOGLGearsDemo.java +++ /dev/null @@ -1,340 +0,0 @@ - -package com.willwinder.ugs.nbm.visualizer; - -import com.jogamp.opengl.GL; -import com.jogamp.opengl.GL2; -import static com.jogamp.opengl.GL2.GL_COMPILE; -import static com.jogamp.opengl.GL2.GL_QUAD_STRIP; -import static com.jogamp.opengl.GL2GL3.GL_QUADS; -import com.jogamp.opengl.GLAutoDrawable; -import com.jogamp.opengl.GLEventListener; -import static com.jogamp.opengl.GLProfile.GL2; -import com.jogamp.opengl.awt.GLCanvas; -import static com.jogamp.opengl.fixedfunc.GLLightingFunc.GL_AMBIENT_AND_DIFFUSE; -import static com.jogamp.opengl.fixedfunc.GLLightingFunc.GL_FLAT; -import static com.jogamp.opengl.fixedfunc.GLLightingFunc.GL_LIGHT0; -import static com.jogamp.opengl.fixedfunc.GLLightingFunc.GL_LIGHTING; -import static com.jogamp.opengl.fixedfunc.GLLightingFunc.GL_NORMALIZE; -import static com.jogamp.opengl.fixedfunc.GLLightingFunc.GL_SMOOTH; -import static com.jogamp.opengl.fixedfunc.GLMatrixFunc.GL_MODELVIEW; -import static com.jogamp.opengl.fixedfunc.GLMatrixFunc.GL_PROJECTION; -import com.jogamp.opengl.util.Animator; -import java.awt.Dimension; -import java.awt.Frame; -import java.awt.event.*; - - - - - -public class JOGLGearsDemo implements GLEventListener, MouseListener, MouseMotionListener { - public static void main(String[] args) { - Frame frame = new Frame("Gear Demo"); - GLCanvas canvas = new GLCanvas(); - - canvas.addGLEventListener(new JOGLGearsDemo()); - frame.add(canvas); - frame.setSize(300, 300); - final Animator animator = new Animator(canvas); - frame.addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent e) { - // Run this on another thread than the AWT event queue to - // make sure the call to Animator.stop() completes before - // exiting - new Thread(new Runnable() { - public void run() { - animator.stop(); - System.exit(0); - } - }).start(); - } - }); - frame.show(); - animator.start(); - } - - private float view_rotx = 20.0f, view_roty = 30.0f, view_rotz = 0.0f; - private int gear1, gear2, gear3; - private float angle = 0.0f; - - private int prevMouseX, prevMouseY; - private boolean mouseRButtonDown = false; - - public void init(GLAutoDrawable drawable) { - // Use debug pipeline - // drawable.setGL(new DebugGL(drawable.getGL())); - - GL2 gl = drawable.getGL().getGL2(); - - System.err.println("INIT GL IS: " + gl.getClass().getName()); - - System.err.println("Chosen GLCapabilities: " + drawable.getChosenGLCapabilities()); - - gl.setSwapInterval(1); - - float pos[] = { 5.0f, 5.0f, 10.0f, 0.0f }; - float red[] = { 0.8f, 0.1f, 0.0f, 1.0f }; - float green[] = { 0.0f, 0.8f, 0.2f, 1.0f }; - float blue[] = { 0.2f, 0.2f, 1.0f, 1.0f }; - - //gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_POSITION, pos, 0); - gl.glEnable(GL.GL_CULL_FACE); - gl.glEnable(GL_LIGHTING); - gl.glEnable(GL_LIGHT0); - gl.glEnable(GL.GL_DEPTH_TEST); - - /* make the gears */ - gear1 = gl.glGenLists(1); - gl.glNewList(gear1, GL_COMPILE); - gl.glMaterialfv(GL.GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red, 0); - gear(gl, 1.0f, 4.0f, 1.0f, 20, 0.7f); - gl.glEndList(); - - gear2 = gl.glGenLists(1); - gl.glNewList(gear2, GL_COMPILE); - gl.glMaterialfv(GL.GL_FRONT, GL_AMBIENT_AND_DIFFUSE, green, 0); - gear(gl, 0.5f, 2.0f, 2.0f, 10, 0.7f); - gl.glEndList(); - - gear3 = gl.glGenLists(1); - gl.glNewList(gear3, GL_COMPILE); - gl.glMaterialfv(GL.GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue, 0); - gear(gl, 1.3f, 2.0f, 0.5f, 10, 0.7f); - gl.glEndList(); - - gl.glEnable(GL_NORMALIZE); - - - //drawable.addMouseListener(this); - //drawable.addMouseMotionListener(this); - } - - public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) { - GL2 gl = drawable.getGL().getGL2(); - - float h = (float)height / (float)width; - - gl.glMatrixMode(GL_PROJECTION); - - System.err.println("GL_VENDOR: " + gl.glGetString(GL.GL_VENDOR)); - System.err.println("GL_RENDERER: " + gl.glGetString(GL.GL_RENDERER)); - System.err.println("GL_VERSION: " + gl.glGetString(GL.GL_VERSION)); - gl.glLoadIdentity(); - gl.glFrustum(-1.0f, 1.0f, -h, h, 5.0f, 60.0f); - gl.glMatrixMode(GL_MODELVIEW); - gl.glLoadIdentity(); - gl.glTranslatef(0.0f, 0.0f, -40.0f); - } - - public void display(GLAutoDrawable drawable) { - // Turn the gears' teeth - angle += 2.0f; - - // Get the GL corresponding to the drawable we are animating - GL2 gl = drawable.getGL().getGL2(); - - // Special handling for the case where the GLJPanel is translucent - // and wants to be composited with other Java 2D content - //if ((drawable instanceof GLJPanel) && - // !((GLJPanel) drawable).isOpaque() && - // ((GLJPanel) drawable).shouldPreserveColorBufferIfTranslucent()) { - // gl.glClear(GL.GL_DEPTH_BUFFER_BIT); - //} else { - gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); - //} - - // Rotate the entire assembly of gears based on how the user - // dragged the mouse around - gl.glPushMatrix(); - gl.glRotatef(view_rotx, 1.0f, 0.0f, 0.0f); - gl.glRotatef(view_roty, 0.0f, 1.0f, 0.0f); - gl.glRotatef(view_rotz, 0.0f, 0.0f, 1.0f); - - // Place the first gear and call its display list - gl.glPushMatrix(); - gl.glTranslatef(-3.0f, -2.0f, 0.0f); - gl.glRotatef(angle, 0.0f, 0.0f, 1.0f); - gl.glCallList(gear1); - gl.glPopMatrix(); - - // Place the second gear and call its display list - gl.glPushMatrix(); - gl.glTranslatef(3.1f, -2.0f, 0.0f); - gl.glRotatef(-2.0f * angle - 9.0f, 0.0f, 0.0f, 1.0f); - gl.glCallList(gear2); - gl.glPopMatrix(); - - // Place the third gear and call its display list - gl.glPushMatrix(); - gl.glTranslatef(-3.1f, 4.2f, 0.0f); - gl.glRotatef(-2.0f * angle - 25.0f, 0.0f, 0.0f, 1.0f); - gl.glCallList(gear3); - gl.glPopMatrix(); - - // Remember that every push needs a pop; this one is paired with - // rotating the entire gear assembly - gl.glPopMatrix(); - } - - public void displayChanged(GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged) {} - - public static void gear(GL2 gl, - float inner_radius, - float outer_radius, - float width, - int teeth, - float tooth_depth) - { - int i; - float r0, r1, r2; - float angle, da; - float u, v, len; - - r0 = inner_radius; - r1 = outer_radius - tooth_depth / 2.0f; - r2 = outer_radius + tooth_depth / 2.0f; - - da = 2.0f * (float) Math.PI / teeth / 4.0f; - - gl.glShadeModel(GL_FLAT); - - gl.glNormal3f(0.0f, 0.0f, 1.0f); - - /* draw front face */ - gl.glBegin(GL_QUAD_STRIP); - for (i = 0; i <= teeth; i++) - { - angle = i * 2.0f * (float) Math.PI / teeth; - gl.glVertex3f(r0 * (float)Math.cos(angle), r0 * (float)Math.sin(angle), width * 0.5f); - gl.glVertex3f(r1 * (float)Math.cos(angle), r1 * (float)Math.sin(angle), width * 0.5f); - if(i < teeth) - { - gl.glVertex3f(r0 * (float)Math.cos(angle), r0 * (float)Math.sin(angle), width * 0.5f); - gl.glVertex3f(r1 * (float)Math.cos(angle + 3.0f * da), r1 * (float)Math.sin(angle + 3.0f * da), width * 0.5f); - } - } - gl.glEnd(); - - /* draw front sides of teeth */ - gl.glBegin(GL_QUADS); - for (i = 0; i < teeth; i++) - { - angle = i * 2.0f * (float) Math.PI / teeth; - gl.glVertex3f(r1 * (float)Math.cos(angle), r1 * (float)Math.sin(angle), width * 0.5f); - gl.glVertex3f(r2 * (float)Math.cos(angle + da), r2 * (float)Math.sin(angle + da), width * 0.5f); - gl.glVertex3f(r2 * (float)Math.cos(angle + 2.0f * da), r2 * (float)Math.sin(angle + 2.0f * da), width * 0.5f); - gl.glVertex3f(r1 * (float)Math.cos(angle + 3.0f * da), r1 * (float)Math.sin(angle + 3.0f * da), width * 0.5f); - } - gl.glEnd(); - - /* draw back face */ - gl.glBegin(GL_QUAD_STRIP); - for (i = 0; i <= teeth; i++) - { - angle = i * 2.0f * (float) Math.PI / teeth; - gl.glVertex3f(r1 * (float)Math.cos(angle), r1 * (float)Math.sin(angle), -width * 0.5f); - gl.glVertex3f(r0 * (float)Math.cos(angle), r0 * (float)Math.sin(angle), -width * 0.5f); - gl.glVertex3f(r1 * (float)Math.cos(angle + 3 * da), r1 * (float)Math.sin(angle + 3 * da), -width * 0.5f); - gl.glVertex3f(r0 * (float)Math.cos(angle), r0 * (float)Math.sin(angle), -width * 0.5f); - } - gl.glEnd(); - - /* draw back sides of teeth */ - gl.glBegin(GL_QUADS); - for (i = 0; i < teeth; i++) - { - angle = i * 2.0f * (float) Math.PI / teeth; - gl.glVertex3f(r1 * (float)Math.cos(angle + 3 * da), r1 * (float)Math.sin(angle + 3 * da), -width * 0.5f); - gl.glVertex3f(r2 * (float)Math.cos(angle + 2 * da), r2 * (float)Math.sin(angle + 2 * da), -width * 0.5f); - gl.glVertex3f(r2 * (float)Math.cos(angle + da), r2 * (float)Math.sin(angle + da), -width * 0.5f); - gl.glVertex3f(r1 * (float)Math.cos(angle), r1 * (float)Math.sin(angle), -width * 0.5f); - } - gl.glEnd(); - - /* draw outward faces of teeth */ - gl.glBegin(GL_QUAD_STRIP); - for (i = 0; i < teeth; i++) - { - angle = i * 2.0f * (float) Math.PI / teeth; - gl.glVertex3f(r1 * (float)Math.cos(angle), r1 * (float)Math.sin(angle), width * 0.5f); - gl.glVertex3f(r1 * (float)Math.cos(angle), r1 * (float)Math.sin(angle), -width * 0.5f); - u = r2 * (float)Math.cos(angle + da) - r1 * (float)Math.cos(angle); - v = r2 * (float)Math.sin(angle + da) - r1 * (float)Math.sin(angle); - len = (float)Math.sqrt(u * u + v * v); - u /= len; - v /= len; - gl.glNormal3f(v, -u, 0.0f); - gl.glVertex3f(r2 * (float)Math.cos(angle + da), r2 * (float)Math.sin(angle + da), width * 0.5f); - gl.glVertex3f(r2 * (float)Math.cos(angle + da), r2 * (float)Math.sin(angle + da), -width * 0.5f); - gl.glNormal3f((float)Math.cos(angle), (float)Math.sin(angle), 0.0f); - gl.glVertex3f(r2 * (float)Math.cos(angle + 2 * da), r2 * (float)Math.sin(angle + 2 * da), width * 0.5f); - gl.glVertex3f(r2 * (float)Math.cos(angle + 2 * da), r2 * (float)Math.sin(angle + 2 * da), -width * 0.5f); - u = r1 * (float)Math.cos(angle + 3 * da) - r2 * (float)Math.cos(angle + 2 * da); - v = r1 * (float)Math.sin(angle + 3 * da) - r2 * (float)Math.sin(angle + 2 * da); - gl.glNormal3f(v, -u, 0.0f); - gl.glVertex3f(r1 * (float)Math.cos(angle + 3 * da), r1 * (float)Math.sin(angle + 3 * da), width * 0.5f); - gl.glVertex3f(r1 * (float)Math.cos(angle + 3 * da), r1 * (float)Math.sin(angle + 3 * da), -width * 0.5f); - gl.glNormal3f((float)Math.cos(angle), (float)Math.sin(angle), 0.0f); - } - gl.glVertex3f(r1 * (float)Math.cos(0), r1 * (float)Math.sin(0), width * 0.5f); - gl.glVertex3f(r1 * (float)Math.cos(0), r1 * (float)Math.sin(0), -width * 0.5f); - gl.glEnd(); - - gl.glShadeModel(GL_SMOOTH); - - /* draw inside radius cylinder */ - gl.glBegin(GL_QUAD_STRIP); - for (i = 0; i <= teeth; i++) - { - angle = i * 2.0f * (float) Math.PI / teeth; - gl.glNormal3f(-(float)Math.cos(angle), -(float)Math.sin(angle), 0.0f); - gl.glVertex3f(r0 * (float)Math.cos(angle), r0 * (float)Math.sin(angle), -width * 0.5f); - gl.glVertex3f(r0 * (float)Math.cos(angle), r0 * (float)Math.sin(angle), width * 0.5f); - } - gl.glEnd(); - } - - // Methods required for the implementation of MouseListener - public void mouseEntered(MouseEvent e) {} - public void mouseExited(MouseEvent e) {} - - public void mousePressed(MouseEvent e) { - prevMouseX = e.getX(); - prevMouseY = e.getY(); - if ((e.getModifiers() & InputEvent.BUTTON3_MASK) != 0) { - mouseRButtonDown = true; - } - } - - public void mouseReleased(MouseEvent e) { - if ((e.getModifiers() & InputEvent.BUTTON3_MASK) != 0) { - mouseRButtonDown = false; - } - } - - public void mouseClicked(MouseEvent e) {} - - // Methods required for the implementation of MouseMotionListener - public void mouseDragged(MouseEvent e) { - int x = e.getX(); - int y = e.getY(); - Dimension size = e.getComponent().getSize(); - - float thetaY = 360.0f * ( (float)(x-prevMouseX)/(float)size.width); - float thetaX = 360.0f * ( (float)(prevMouseY-y)/(float)size.height); - - prevMouseX = x; - prevMouseY = y; - - view_rotx += thetaX; - view_roty += thetaY; - } - - public void mouseMoved(MouseEvent e) {} - - @Override - public void dispose(GLAutoDrawable glad) { - //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } -} -