Exemple #1
0
 @Override
 public File getRemoteFile(String dir, String simpleName, Locale locale, boolean checkCache)
     throws ProcessingException {
   RemoteFile spec = null;
   File f = null;
   if (locale != null && simpleName != null && simpleName.lastIndexOf(".") != -1) {
     String filename = simpleName;
     String language = locale.toString().replaceAll("__", "_");
     String prefix = filename.substring(0, filename.lastIndexOf(".")) + "_";
     String suffix = filename.substring(filename.lastIndexOf("."));
     filename = prefix + language + suffix;
     File test = getFileLocation(dir, filename, false);
     while (!test.exists()) {
       if (language.indexOf("_") == -1) {
         filename = simpleName;
         break;
       }
       language = language.substring(0, language.lastIndexOf("_"));
       filename = prefix + language + suffix;
       test = getFileLocation(dir, filename, false);
     }
     f = getFileLocation(dir, filename, false);
     spec = new RemoteFile(dir, filename, locale, 0L);
   } else {
     f = getFileLocation(dir, simpleName, false);
     spec = new RemoteFile(dir, simpleName, locale, 0L);
   }
   if (f.exists()) {
     spec.setLastModified(f.lastModified());
   }
   //
   if (checkCache && OfflineState.isOnlineInCurrentThread()) {
     IRemoteFileService svc = SERVICES.getService(IRemoteFileService.class);
     spec = svc.getRemoteFile(spec);
     try {
       if (spec.getName() != null && !spec.getName().equalsIgnoreCase(f.getName())) {
         if (locale != null && f.getName().length() > spec.getName().length()) {
           // if local file has longer name (including locale), this means that
           // this file was deleted on the server
           f.delete();
         }
         f = getFileLocation(spec.getDirectory(), spec.getName(), false);
       }
       if (spec.exists() && spec.hasContent()) {
         spec.writeData(new FileOutputStream(f));
         f.setLastModified(spec.getLastModified());
       } else if (!spec.exists()) {
         f.delete();
       }
     } catch (IOException e) {
       throw new ProcessingException("error writing remote file in local store", e);
     }
   }
   return f;
 }
 protected void setLocationFromScout() {
   m_browserExtension.clearResourceCache();
   m_browserExtension.clearLocalHyperlinkCache();
   String location = getScoutObject().getLocation();
   RemoteFile r = getScoutObject().getValue();
   if (location == null && r != null && r.exists()) {
     try {
       if (r.getName().matches(".*\\.(zip|jar)")) {
         location = registerResourcesInZip(r);
       } else {
         String content = IOUtility.getContent(r.getDecompressedReader());
         content = m_browserExtension.adaptLocalHyperlinks(content, 1);
         location =
             m_browserExtension.addResource(
                 r.getName(), new ByteArrayInputStream(content.getBytes("UTF-8")));
       }
       // Prevent caching by making the request unique
       if (location != null) {
         location += "?nocache=" + System.currentTimeMillis();
       }
     } catch (Throwable t) {
       LOG.error("preparing html content for " + r, t);
     }
   }
   m_currentLocation = location;
   if (m_currentLocation != null) {
     getUiField().setUrl(m_currentLocation);
   } else {
     getUiField().setText("");
   }
 }
 /**
  * Reads a bookmark folder.
  *
  * @since 3.8.2
  */
 private BookmarkFolder readBookmarkFolder(String filename) {
   RemoteFile spec = new RemoteFile("bookmarks", filename, 0);
   RemoteFile f = BEANS.get(IRemoteFileService.class).getRemoteFile(spec);
   if (f.exists()) {
     try {
       byte[] bytes = f.extractData();
       return SerializationUtility.createObjectSerializer()
           .deserialize(bytes, BookmarkFolder.class);
     } catch (Exception t) {
       LOG.error("Could not deserialize bookmark folder", t);
     }
   }
   return null;
 }
Exemple #4
0
 private void syncRemoteFilesInternal(
     String serverFolderPath, FilenameFilter filter, boolean useServerFolderStructureOnClient)
     throws ProcessingException {
   IRemoteFileService svc = SERVICES.getService(IRemoteFileService.class);
   String[][] realFiles = getFiles(serverFolderPath, filter, useServerFolderStructureOnClient);
   RemoteFile[] existingFileInfoOnClient = new RemoteFile[realFiles.length];
   for (int i = 0; i < realFiles.length; i++) {
     RemoteFile rf = new RemoteFile(realFiles[i][0], realFiles[i][1], 0);
     String dir = m_rootPath == null ? realFiles[i][0] : "";
     File f = getFileLocation(dir, realFiles[i][1], false);
     if (f.exists()) {
       rf.setLastModified(f.lastModified());
     }
     existingFileInfoOnClient[i] = rf;
   }
   existingFileInfoOnClient =
       svc.getRemoteFiles(serverFolderPath, filter, existingFileInfoOnClient);
   for (RemoteFile spec : existingFileInfoOnClient) {
     String fileDirectory = useServerFolderStructureOnClient ? spec.getDirectory() : null;
     File f = getFileLocation(fileDirectory, spec.getName(), false);
     if (spec.exists() && spec.hasContent()) {
       try {
         if (spec.hasMoreParts()) {
           // file is splitted - get all parts
           int counter = 0;
           long fileDate = spec.getLastModified();
           File part = getFileLocation(fileDirectory, spec.getName() + "." + counter, false);
           spec.writeData(new FileOutputStream(part));
           part.setLastModified(fileDate);
           RemoteFile specPart = spec;
           while (specPart.hasMoreParts()) {
             counter++;
             part = getFileLocation(fileDirectory, spec.getName() + "." + counter, false);
             if (!part.exists() || fileDate != part.lastModified()) {
               specPart = svc.getRemoteFilePart(spec, counter);
               specPart.writeData(new FileOutputStream(part));
               part.setLastModified(fileDate);
             } else {
               // resuming canceled part: nothing to do
             }
           }
           // put together
           counter = 0;
           f = getFileLocation(fileDirectory, spec.getName(), false);
           OutputStream out = new FileOutputStream(f);
           part = getFileLocation(fileDirectory, spec.getName() + "." + counter, false);
           while (part.exists()) {
             InputStream in = new FileInputStream(part);
             byte[] buf = new byte[102400];
             int len;
             while ((len = in.read(buf)) > 0) {
               out.write(buf, 0, len);
             }
             out.flush();
             in.close();
             part.delete();
             counter++;
             part = getFileLocation(fileDirectory, spec.getName() + "." + counter, false);
           }
           out.close();
           f.setLastModified(fileDate);
         } else {
           // normal files
           spec.writeData(new FileOutputStream(f));
           f.setLastModified(spec.getLastModified());
         }
       } catch (IOException e) {
         throw new ProcessingException("error writing remote file in local store", e);
       }
     } else if (!spec.exists()) {
       f.delete();
     }
   }
 }