/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package org.jkan997.slingbeans.nbprojects.maven; import java.io.File; import java.io.Writer; import java.util.HashMap; import java.util.Map; import org.jkan997.slingbeans.helper.IOHelper; import org.jkan997.slingbeans.helper.LogHelper; import org.jkan997.slingbeans.nbservices.SlingFsFactory; import org.jkan997.slingbeans.slingfs.FileSystem; import org.jkan997.slingbeans.slingfs.local.LocalFileObject; import org.jkan997.slingbeans.slingfs.local.LocalFileSystem; import org.jkan997.slingbeans.vlt.VltManager; import org.openide.filesystems.FileAttributeEvent; import org.openide.filesystems.FileChangeListener; import org.openide.filesystems.FileEvent; import org.openide.filesystems.FileObject; import org.openide.filesystems.FileRenameEvent; import org.openide.filesystems.FileUtil; import org.openide.windows.IOProvider; import org.openide.windows.InputOutput; /** * * @author jakaniew */ public class ContentChangeListener implements FileChangeListener { public static Map<String, ContentChangeListener> listeners = new HashMap<String, ContentChangeListener>(); public static void createListener(String contentPath, LocalSlingRootNode rootNode) { org.openide.filesystems.FileObject projectFo = FileUtil.toFileObject(new File(contentPath)); ContentChangeListener oldListener = listeners.get(projectFo.getPath()); if (oldListener != null) { projectFo.removeRecursiveListener(oldListener); listeners.remove(projectFo.getPath()); } ContentChangeListener contentChangeListener = new ContentChangeListener(rootNode); projectFo.addRecursiveListener(contentChangeListener); listeners.put(projectFo.getPath(), contentChangeListener); } private final LocalFileSystem lfs; private final LocalSlingRootNode rootNode; private ContentChangeListener(LocalSlingRootNode rootNode) { this.rootNode = rootNode; this.lfs = rootNode.getFileSystem(); } private Writer logWriter = null; protected Writer getOutputWriter() { if (logWriter == null) { IOProvider iop = IOProvider.getDefault(); /*InputOutput io = iop.getIO("Sling Synchronization", false); if (io!=null){ io.closeInputOutput(); }*/ InputOutput io = iop.getIO("Sling Synchronization", false); logWriter = io.getOut(); io.setOutputVisible(true); io.select(); } return logWriter; } @Override public void fileFolderCreated(FileEvent fe) { LogHelper.logInfo(this, "fileFolderCreated(%s)", fe.getFile().getPath()); } @Override public void fileDataCreated(FileEvent fe) { LogHelper.logInfo(this, "fileDataCreated(%s)", fe.getFile().getPath()); } @Override public void fileChanged(FileEvent fe) { String filePath = fe.getFile().getPath(); if ((filePath.indexOf(".xml") > 0) || (filePath.indexOf("/.") > 0)) { return; } LogHelper.logInfo(this, "fileChanged(%s)", fe.getFile().getPath()); if (lfs.isXmlDescriptorFile(new File(fe.getFile().getPath()))) { //rootNode.refresh(); return; } FileObject fo = fe.getFile(); LocalFileObject lfo = lfs.getFileObject(fo.getPath()); try { Writer wrt = getOutputWriter(); wrt.write("File changed: " + lfo.getFilePath() + "\n"); SlingFsFactory slingFsFactory = SlingFsFactory.lookup(); String fsId = slingFsFactory.getDefualtFileSystemId(); if (fsId == null) { wrt.write("No connection to Sling Server cannot save.\n"); return; } FileSystem fs = slingFsFactory.getFileSystem(fsId); org.jkan997.slingbeans.slingfs.FileObject targetFo = fs.getFileObject(lfo.getFilePath()); File localFile = new File(lfo.getLocalFilePath()); if (localFile != null) { byte[] fileContent = IOHelper.readFileToBytes(localFile); if (targetFo != null) { wrt.write("Updating file " + targetFo.getFilePath() + "\n"); targetFo.setFileContent(fileContent); } else { String newFilePath = lfo.getFilePath(); String parentPath = newFilePath.substring(0, newFilePath.lastIndexOf("/")); wrt.write("Trying to create new file in folder" + parentPath + "\n"); org.jkan997.slingbeans.slingfs.FileObject targetFoParent = fs.getFileObject(parentPath); if (targetFoParent != null) { fs.createFile(newFilePath, fileContent); } } } /*VltManager vltManager = fs.getVltManager(); vltManager.importContentToRemote(rootNode.getContentPath(),lfo.getFilePath());*/ //rootNode.refresh(); } catch (Exception ex) { LogHelper.logError(ex); } } @Override public void fileDeleted(FileEvent fe) { LogHelper.logInfo(this, "fileDeleted(%s)", fe.getFile().getPath()); } @Override public void fileRenamed(FileRenameEvent fre) { LogHelper.logInfo(this, "fileRenamed(%s)", fre.getFile().getPath()); } @Override public void fileAttributeChanged(FileAttributeEvent fae) { LogHelper.logInfo(this, "fileAttributeChanged(%s)", fae.getFile().getPath()); } };