/**
* Copyright (c) 2011, 2012 Gunnar Wagenknecht and others.
* All rights reserved.
*
* This program and the accompanying materials are made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Gunnar Wagenknecht - initial API and implementation
*/
package org.eclipse.gyrex.admin.ui.internal.pages;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.gyrex.admin.ui.internal.AdminUiActivator;
import org.eclipse.gyrex.admin.ui.internal.application.AdminUiUtil;
import org.eclipse.gyrex.admin.ui.internal.widgets.Infobox;
import org.eclipse.gyrex.admin.ui.pages.AdminPage;
import org.eclipse.gyrex.common.internal.services.IServiceProxyChangeListener;
import org.eclipse.gyrex.common.internal.services.ServiceProxy;
import org.eclipse.gyrex.common.services.IServiceProxy;
import org.eclipse.gyrex.server.Platform;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
/**
* System overview.
*/
@SuppressWarnings("restriction")
public class OverviewPage extends AdminPage {
private Composite overviewPageComposite;
private IServiceProxy<OverviewPageItem> itemServiceProxy;
private List<Control> itemControls;
private IServiceProxyChangeListener layoutOnServiceChange;
public OverviewPage() {
setTitle("Gyrex System Overview");
setTitleToolTip("Welcome to Gyrex");
}
@Override
public void activate() {
// call super
super.activate();
if (null == itemServiceProxy) {
itemServiceProxy = AdminUiActivator.getInstance().getServiceHelper().trackService(OverviewPageItem.class);
}
// create items
final List<OverviewPageItem> items = itemServiceProxy.getServices();
itemControls = new ArrayList<Control>(items.size());
for (final OverviewPageItem item : items) {
itemControls.add(item.createControl(overviewPageComposite));
}
// re-layout on service changes (items must dispose themselves if the leave)
final Display display = overviewPageComposite.getDisplay();
layoutOnServiceChange = new IServiceProxyChangeListener() {
@Override
public boolean serviceChanged(final IServiceProxy<?> proxy) {
display.asyncExec(new Runnable() {
@Override
public void run() {
doLayout();
}
});
return false;
}
};
((ServiceProxy<OverviewPageItem>) itemServiceProxy).addChangeListener(layoutOnServiceChange);
doLayout();
}
@Override
public Control createControl(final Composite parent) {
overviewPageComposite = new Composite(parent, SWT.NONE);
overviewPageComposite.setLayout(AdminUiUtil.createMainLayout(3));
final Infobox infobox = new Infobox(overviewPageComposite);
final GridData gd = AdminUiUtil.createHorzFillData();
gd.horizontalSpan = 3;
infobox.setLayoutData(gd);
infobox.addHeading("Welcome to Gyrex.");
infobox.addParagraph("Your system is running and ready for administration. If you like what you see here, please follow our <a href=\"http://www.eclipse.org/gyrex/\">blog</a>.");
infobox.addParagraph("This box only appears in development mode. A Gyrex node can opperate in different modes which influence the default configuration of the system. Development mode is the default mode and provides an environment that reduces the amount of setup work for developers. For example, a service such as Apache ZooKeeper which typically runs on different nodes in a production system, is started automatically within the Gyrex Java VM in development mode.");
return overviewPageComposite;
}
@Override
public void deactivate() {
super.deactivate();
if (null != itemServiceProxy && null != layoutOnServiceChange) {
((ServiceProxy<OverviewPageItem>) itemServiceProxy).removeChangeListener(layoutOnServiceChange);
layoutOnServiceChange = null;
}
}
void doLayout() {
if (!overviewPageComposite.isDisposed()) {
overviewPageComposite.layout();
}
}
}