Package org.erlide.engine.new_model.internal

Source Code of org.erlide.engine.new_model.internal.ErlModelManager

package org.erlide.engine.new_model.internal;

import org.eclipse.core.resources.IResourceChangeEvent;
import org.eclipse.core.resources.IResourceChangeListener;
import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.ISafeRunnable;
import org.eclipse.core.runtime.ListenerList;
import org.eclipse.core.runtime.SafeRunner;
import org.eclipse.handly.model.IElementChangeEvent;
import org.eclipse.handly.model.IElementChangeListener;
import org.eclipse.handly.model.impl.ElementChangeEvent;
import org.eclipse.handly.model.impl.HandleDelta;
import org.eclipse.handly.model.impl.HandleManager;
import org.eclipse.xtext.xbase.lib.Exceptions;
import org.erlide.engine.new_model.IErlModel;
import org.erlide.engine.new_model.IErlModelManager;
import org.erlide.engine.new_model.internal.ErlDeltaProcessor;
import org.erlide.engine.new_model.internal.ErlModel;
import org.erlide.engine.new_model.internal.ErlModelCache;
import org.erlide.util.ErlLogger;

/**
* The manager for the Erlang model.
*
* @threadsafe This class is intended to be thread-safe
*/
@SuppressWarnings("all")
public class ErlModelManager implements IErlModelManager, IResourceChangeListener {
  public final static ErlModelManager INSTANCE = new ErlModelManager();
 
  private IErlModel erlModel;
 
  private HandleManager handleManager;
 
  private ListenerList listenerList;
 
  public void startup() {
    ErlModel _erlModel = new ErlModel();
    this.erlModel = _erlModel;
    ErlModelCache _erlModelCache = new ErlModelCache();
    HandleManager _handleManager = new HandleManager(_erlModelCache);
    this.handleManager = _handleManager;
    ListenerList _listenerList = new ListenerList();
    this.listenerList = _listenerList;
    IWorkspace _workspace = this.erlModel.getWorkspace();
    _workspace.addResourceChangeListener(this, IResourceChangeEvent.POST_CHANGE);
  }
 
  public void shutdown() {
    boolean _tripleNotEquals = (this.erlModel != null);
    if (_tripleNotEquals) {
      IWorkspace _workspace = this.erlModel.getWorkspace();
      _workspace.removeResourceChangeListener(this);
    }
    this.listenerList = null;
    this.handleManager = null;
    this.erlModel = null;
  }
 
  public IErlModel getErlModel() {
    boolean _tripleEquals = (this.erlModel == null);
    if (_tripleEquals) {
      throw new IllegalStateException();
    }
    return this.erlModel;
  }
 
  public HandleManager getHandleManager() {
    boolean _tripleEquals = (this.handleManager == null);
    if (_tripleEquals) {
      throw new IllegalStateException();
    }
    return this.handleManager;
  }
 
  private ErlModelManager() {
  }
 
  public void resourceChanged(final IResourceChangeEvent event) {
    int _type = event.getType();
    boolean _notEquals = (_type != IResourceChangeEvent.POST_CHANGE);
    if (_notEquals) {
      return;
    }
    final ErlDeltaProcessor deltaProcessor = new ErlDeltaProcessor();
    try {
      IResourceDelta _delta = event.getDelta();
      _delta.accept(deltaProcessor);
    } catch (final Throwable _t) {
      if (_t instanceof CoreException) {
        final CoreException e = (CoreException)_t;
        ErlLogger.error(e);
      } else {
        throw Exceptions.sneakyThrow(_t);
      }
    }
    HandleDelta _delta_1 = deltaProcessor.getDelta();
    boolean _isEmpty = _delta_1.isEmpty();
    boolean _not = (!_isEmpty);
    if (_not) {
      HandleDelta _delta_2 = deltaProcessor.getDelta();
      ElementChangeEvent _elementChangeEvent = new ElementChangeEvent(ElementChangeEvent.POST_CHANGE, _delta_2);
      this.fireElementChangeEvent(_elementChangeEvent);
    }
  }
 
  public void addElementChangeListener(final IElementChangeListener listener) {
    boolean _tripleEquals = (this.listenerList == null);
    if (_tripleEquals) {
      throw new IllegalStateException();
    }
    this.listenerList.add(listener);
  }
 
  public void removeElementChangeListener(final IElementChangeListener listener) {
    boolean _tripleEquals = (this.listenerList == null);
    if (_tripleEquals) {
      throw new IllegalStateException();
    }
    this.listenerList.remove(listener);
  }
 
  public void fireElementChangeEvent(final IElementChangeEvent event) {
    boolean _tripleEquals = (this.listenerList == null);
    if (_tripleEquals) {
      throw new IllegalStateException();
    }
    final Object[] listeners = this.listenerList.getListeners();
    for (final Object listener : listeners) {
      SafeRunner.run(
        new ISafeRunnable() {
          public void handleException(final Throwable exception) {
          }
         
          public void run() {
            ((IElementChangeListener) listener).elementChanged(event);
          }
        });
    }
  }
}
TOP

Related Classes of org.erlide.engine.new_model.internal.ErlModelManager

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.