Package com.subgraph.vega.internal.http.proxy

Source Code of com.subgraph.vega.internal.http.proxy.ProxyScannerScopeTracker

package com.subgraph.vega.internal.http.proxy;

import com.subgraph.vega.api.events.IEvent;
import com.subgraph.vega.api.events.IEventHandler;
import com.subgraph.vega.api.model.IModel;
import com.subgraph.vega.api.model.IWorkspace;
import com.subgraph.vega.api.model.WorkspaceCloseEvent;
import com.subgraph.vega.api.model.WorkspaceOpenEvent;
import com.subgraph.vega.api.model.WorkspaceResetEvent;
import com.subgraph.vega.api.model.scope.ActiveScopeChangedEvent;
import com.subgraph.vega.api.model.scope.ITargetScope;

public class ProxyScannerScopeTracker {
 
  private final IEventHandler scopeChangeHandler;
  private final ProxyScanner proxyScanner;
  private IWorkspace currentWorkspace;
  private ITargetScope currentActiveScope;
 
  ProxyScannerScopeTracker(IModel model, ProxyScanner proxyScanner) {
    this.proxyScanner = proxyScanner;
    this.scopeChangeHandler = createScopeChangeListener();
    setCurrentWorkspace(model.addWorkspaceListener(createWorkspaceListener()));
  }
 
  ITargetScope getCurrentActiveScope() {
    return currentActiveScope;
  }

  private IEventHandler createWorkspaceListener() {
    return new IEventHandler() {
      @Override
      public void handleEvent(IEvent event) {
        if(event instanceof WorkspaceOpenEvent) {
          handleWorkspaceOpen((WorkspaceOpenEvent) event);
        } else if (event instanceof WorkspaceCloseEvent) {
          handleWorkspaceClose((WorkspaceCloseEvent) event);
        } else if (event instanceof WorkspaceResetEvent) {
          handleWorkspaceReset((WorkspaceResetEvent) event);
        }
      }
    };
  }
 
  private IEventHandler createScopeChangeListener() {
    return new IEventHandler() {
      @Override
      public void handleEvent(IEvent event) {
        if(event instanceof ActiveScopeChangedEvent) {
          currentActiveScope = ((ActiveScopeChangedEvent)event).getActiveScope();
        }
      }
    };
  }

  private void handleWorkspaceOpen(WorkspaceOpenEvent event) {
    setCurrentWorkspace(event.getWorkspace());
  }
 
  private void handleWorkspaceReset(WorkspaceResetEvent event) {
    setCurrentWorkspace(event.getWorkspace());
   
  }
 
  private void handleWorkspaceClose(WorkspaceCloseEvent event) {
    setCurrentWorkspace(null);
  }
 
  private void setCurrentWorkspace(IWorkspace workspace) {
    final IWorkspace oldWorkspace = currentWorkspace;
    currentWorkspace = workspace;
    currentActiveScope = setScopeChangeListener(oldWorkspace, workspace);
    proxyScanner.handleWorkspaceChanged(workspace);
  }
 
  private ITargetScope setScopeChangeListener(IWorkspace oldWorkspace, IWorkspace newWorkspace) {
    if(oldWorkspace != null) {
      oldWorkspace.getTargetScopeManager().removeActiveScopeChangeListener(scopeChangeHandler);
    }
    if(newWorkspace != null) {
      return newWorkspace.getTargetScopeManager().addActiveScopeChangeListener(scopeChangeHandler);
    } else {
      return null;
    }
  }
}
TOP

Related Classes of com.subgraph.vega.internal.http.proxy.ProxyScannerScopeTracker

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.