protected void activate()

in cli/cli/src/main/java/org/apache/sling/ide/cli/impl/ContentSync.java [69:130]


    protected void activate(Config cfg) throws Exception {

        File projectDir = new File(cfg.projectDir());
        
        WorkspaceProject prj = FSResources.create(projectDir, projectDir, filterLocator);
        
        logger.trace("Working on project {0} at {1}", prj.getName(), prj.getOSPath());
        
        Repository repo = repoFactory.connectRepository(new RepositoryInfo(cfg.username(), cfg.password(), URI.create(cfg.repositoryUrl())));
        
        repo.newListChildrenNodeCommand("/").execute();
        
        logger.trace("Connected to {0} ", repo.getRepositoryInfo());
        
        Path syncDirPath = prj.getSyncDirectory().getOSPath();
        
        watcher = new DirWatcher(syncDirPath);
        
        logger.trace("Watching syncDir {0}", syncDirPath);
        
        watcherThread = new Thread(new Runnable()  {
            @Override
            public void run() {
                try {
                    while ( ! Thread.currentThread().isInterrupted() ) {

                        Event event = watcher.poll();
            
                        Path path = event.getPath();
                        
                        WorkspacePath resourceRelativePath = WorkspacePaths.fromOsPath(path);
                        logger.trace("Change detected in workspace path {0}", resourceRelativePath);
                        if ( event.getKind() == StandardWatchEventKinds.ENTRY_CREATE || 
                                event.getKind() == StandardWatchEventKinds.ENTRY_MODIFY ) {
                            try {
                                Command<?> cmd = commandFactory.
                                    newCommandForAddedOrUpdatedResource(repo, prj.getSyncDirectory().getFile(resourceRelativePath));
                                if ( cmd != null )
                                    cmd.execute();
                            } catch (IOException e) {
                                logger.warn("Sync failed for path " + resourceRelativePath , e);
                            }
                        }
                        
                        if ( event.getKind() == StandardWatchEventKinds.ENTRY_DELETE ) {
                            try {
                                Command<?> cmd = commandFactory.newCommandForRemovedResource(repo, prj.getSyncDirectory().getFile(resourceRelativePath));
                                if ( cmd != null )
                                    cmd.execute();
                            } catch (IOException e) {
                                logger.warn("Sync failed for path " + resourceRelativePath , e);
                            }
                        }
                    }
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            }
        });
        
        watcherThread.start();
    }