diff --git a/mcserver-manager/build.gradle b/mcserver-manager/build.gradle new file mode 100644 index 0000000..008d4a4 --- /dev/null +++ b/mcserver-manager/build.gradle @@ -0,0 +1,16 @@ +group = 'asys' +version = '0.1-SNAPSHOT' + +apply plugin: 'osgi' + +jar { + manifest { + name = 'ASys MC server manager' + instruction 'Bundle-Activator', 'asys.mcsmanager.Activator' + } +} + +dependencies { + compile project(':core') + compile project(':webinterface') +} diff --git a/mcserver-manager/src/main/java/asys/mcsmanager/Activator.java b/mcserver-manager/src/main/java/asys/mcsmanager/Activator.java new file mode 100644 index 0000000..d34eda3 --- /dev/null +++ b/mcserver-manager/src/main/java/asys/mcsmanager/Activator.java @@ -0,0 +1,57 @@ +/* + * DmitriyMX + * 2017-03-11 + */ +package asys.mcsmanager; + +import asys.webinterface.api.MainMenu; +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceEvent; +import org.osgi.framework.ServiceListener; +import org.osgi.util.tracker.ServiceTracker; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class Activator implements BundleActivator, ServiceListener { + private final Logger logger = LoggerFactory.getLogger(Activator.class); + private ServiceTracker serviceTracker; + + @Override + public void start(BundleContext context) throws Exception { + logger.debug("Register service listener"); + context.addServiceListener(this); + + logger.debug("Get service: {}", MainMenu.class); + serviceTracker = new ServiceTracker<>(context, MainMenu.class, null); + } + + @Override + public void stop(BundleContext context) throws Exception { + serviceTracker.close(); + context.removeServiceListener(this); + } + + @Override + public void serviceChanged(ServiceEvent event) { + if (event.getType() == ServiceEvent.REGISTERED) { + String[] objectClass = (String[]) event.getServiceReference().getProperty("objectClass"); + for (String classStr : objectClass) { + if (classStr.equals("asys.webinterface.api.MainMenu")) { + try { + serviceTracker.open(); + MainMenu mainMenu = serviceTracker.waitForService(5000); + if (mainMenu != null) { + mainMenu.addItem("Серверы", "/modules/mcsmanager"); + return; + } else { + logger.debug("service not found =("); + } + } catch (InterruptedException ignore) { + // ignore + } + } + } + } + } +} diff --git a/settings.gradle b/settings.gradle index c2b72e9..8ebf8bd 100644 --- a/settings.gradle +++ b/settings.gradle @@ -3,3 +3,5 @@ include 'core' include 'commons' include 'webinterface' include 'bridge' +include 'mcserver-manager' +