docs: @Override
      public SortedSet<String> getSkinNames(PortletRequest request) {
          // Context to access the filesystem
          PortletContext ctx = request.getPortletSession().getPortletContext();
  
          // Determine the full path to the skins directory
          String skinsFilepath = ctx.getRealPath(localRelativeRootPath + "/skinList.xml");
  
          // Create File object to access the filesystem
          File skinList = new File(skinsFilepath);
  
          TreeSet<String> skins = new TreeSet<>();
          try {
              DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
              DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
              Document doc = dBuilder.parse(skinList);
              doc.getDocumentElement().normalize();
  
              NodeList nList = doc.getElementsByTagName("skin-key");
              for (int temp = 0; temp < nList.getLength(); temp++) {
                  org.w3c.dom.Element element = (org.w3c.dom.Element) nList.item(temp);
                  String skinName = element.getTextContent();
                  logger.debug("Found skin-key value {}", skinName);
                  skins.add(skinName);
              }
          } catch (SAXException | ParserConfigurationException | IOException e) {
              logger.error("Error processing skinsFilepath {}", skinsFilepath, e);
          }
  
          return skins;
      }