package gov.nasa.jpl.mbee.mdk;
import com.nomagic.magicdraw.cookies.CloseCookie;
import com.nomagic.magicdraw.cookies.CookieSet;
import com.nomagic.magicdraw.core.Application;
import com.nomagic.magicdraw.plugins.Plugin;
import gov.nasa.jpl.mbee.mdk.mms.sync.coordinated.CoordinatedSyncProjectEventListenerAdapter;
import gov.nasa.jpl.mbee.mdk.mms.sync.delta.DeltaSyncProjectEventListenerAdapter;
import gov.nasa.jpl.mbee.mdk.mms.sync.jms.JMSSyncProjectEventListenerAdapter;
import gov.nasa.jpl.mbee.mdk.mms.sync.local.LocalSyncProjectEventListenerAdapter;
import gov.nasa.jpl.mbee.mdk.mms.sync.queue.OutputQueueCloseCookie;
import gov.nasa.jpl.mbee.mdk.mms.sync.status.SyncStatusProjectEventListenerAdapter;
/*
* This class is responsible for performing automatic syncs with
* MMS whenever any type of commit is executed.
* This class is also responsible for start the REST web services.
*/
public class MMSSyncPlugin extends Plugin {
private static MMSSyncPlugin instance;
private LocalSyncProjectEventListenerAdapter localSyncProjectEventListenerAdapter;
private JMSSyncProjectEventListenerAdapter jmsSyncProjectEventListenerAdapter;
private DeltaSyncProjectEventListenerAdapter deltaSyncProjectEventListenerAdapter;
private CoordinatedSyncProjectEventListenerAdapter coordinatedSyncProjectEventListenerAdapter;
private SyncStatusProjectEventListenerAdapter syncStatusProjectEventListenerAdapter;
public static MMSSyncPlugin getInstance() {
if (instance == null) {
instance = new MMSSyncPlugin();
}
return instance;
}
public LocalSyncProjectEventListenerAdapter getLocalSyncProjectEventListenerAdapter() {
return localSyncProjectEventListenerAdapter;
}
public JMSSyncProjectEventListenerAdapter getJmsSyncProjectEventListenerAdapter() {
return jmsSyncProjectEventListenerAdapter;
}
public DeltaSyncProjectEventListenerAdapter getDeltaSyncProjectEventListenerAdapter() {
return deltaSyncProjectEventListenerAdapter;
}
public CoordinatedSyncProjectEventListenerAdapter getCoordinatedSyncProjectEventListenerAdapter() {
return coordinatedSyncProjectEventListenerAdapter;
}
public SyncStatusProjectEventListenerAdapter getSyncStatusProjectEventListenerAdapter() {
return syncStatusProjectEventListenerAdapter;
}
@Override
public void init() {
// Order matters!
Application.getInstance().getProjectsManager().addProjectListener(coordinatedSyncProjectEventListenerAdapter = new CoordinatedSyncProjectEventListenerAdapter());
Application.getInstance().getProjectsManager().addProjectListener(deltaSyncProjectEventListenerAdapter = new DeltaSyncProjectEventListenerAdapter());
// Common and MMS clear their respective inMemoryChangelogs on save, so it needs to go after coordinated and delta which use it.
Application.getInstance().getProjectsManager().addProjectListener(localSyncProjectEventListenerAdapter = new LocalSyncProjectEventListenerAdapter());
Application.getInstance().getProjectsManager().addProjectListener(jmsSyncProjectEventListenerAdapter = new JMSSyncProjectEventListenerAdapter());
Application.getInstance().getProjectsManager().addProjectListener(syncStatusProjectEventListenerAdapter = new SyncStatusProjectEventListenerAdapter());
CookieSet cookieSet = Application.getInstance().getCookieSet();
CloseCookie closeCookie = (CloseCookie) cookieSet.getCookie(CloseCookie.class);
if (closeCookie != null) {
cookieSet.remove(closeCookie);
}
cookieSet.add(new OutputQueueCloseCookie(closeCookie));
}
@Override
public boolean close() {
return true;
}
public boolean isSupported() {
return true;
}
}