syd711 / vpin-studio

Competition, table, and player management for VPins.
MIT License
28 stars 2 forks source link

PrOPPER naming fails if no files assigned to an emulator #331

Closed oper8r00 closed 2 months ago

oper8r00 commented 2 months ago

Describe the bug If you have a popper emulator with zero games associated, the PrOPPER renaming system will throw an exception and appear as if it does nothing in the UI.

To Reproduce Steps to reproduce the behavior:

  1. Create or have a popper emulator with no files associated
  2. Open VPin Studio and select a title you wish to rename
  3. Click on the Edit Popper Data button (or right-click to do the same)
  4. Select the table & appropriate table version from the VPS entry
  5. Change something with PrOPPER renaming (i.e. ensure you will be attempting to change the file name)
  6. Click Save or Save & Close
  7. The system will do nothing when the buttons are pressed and no files have been touched

Expected behavior The table data & its associated files should be renamed to match the PrOPPER name.

Workaround Import any single table into the empty emulator to ensure ALL emulators have at least one associated table/game

Desktop (please complete the following information):

Additional context Stack trace of the exception - 13-07 07:33:51.204 [/api/v1/popper/imports] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.io.UncheckedIOException: java.nio.file.NoSuchFileException: C:\vPinball\VisualPinballXBeta\tables] with root cause java.nio.file.NoSuchFileException: C:\vPinball\VisualPinballXBeta\tables at java.base/sun.nio.fs.WindowsException.translateToIOException(Unknown Source) at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source) at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source) at java.base/sun.nio.fs.WindowsFileAttributeViews$Basic.readAttributes(Unknown Source) at java.base/sun.nio.fs.WindowsFileAttributeViews$Basic.readAttributes(Unknown Source) at java.base/sun.nio.fs.WindowsFileSystemProvider.readAttributes(Unknown Source) at java.base/java.nio.file.Files.readAttributes(Unknown Source) at java.base/java.nio.file.FileTreeWalker.getAttributes(Unknown Source) at java.base/java.nio.file.FileTreeWalker.visit(Unknown Source) at java.base/java.nio.file.FileTreeWalker.walk(Unknown Source) at java.base/java.nio.file.FileTreeIterator.(Unknown Source) at java.base/java.nio.file.Files.walk(Unknown Source) at org.apache.commons.io.file.PathUtils.walk(PathUtils.java:1769) at org.apache.commons.io.FileUtils.streamFiles(FileUtils.java:2985) at org.apache.commons.io.FileUtils.lambda$listFiles$10(FileUtils.java:2241) at org.apache.commons.io.function.Uncheck.get(Uncheck.java:197) at org.apache.commons.io.FileUtils.listFiles(FileUtils.java:2241) at de.mephisto.vpin.server.popper.PopperService.getImportTables(PopperService.java:85) at de.mephisto.vpin.server.popper.PopperServiceResource.getImportTables(PopperServiceResource.java:55) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.base/java.lang.reflect.Method.invoke(Unknown Source) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1071) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:964) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) at javax.servlet.http.HttpServlet.service(HttpServlet.java:655) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at de.mephisto.vpin.server.ShutdownResetFilter.doFilter(ShutdownResetFilter.java:26) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1789) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Unknown Source)

syd711 commented 2 months ago

Fixed with 2.21.6