/******************************************************************************* * Copyright (c) 2012 AGETO Service GmbH 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 * Andreas Mihm - rework new admin ui *******************************************************************************/ package org.eclipse.gyrex.admin.ui.http.internal; import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.TreeSet; import org.eclipse.gyrex.context.IRuntimeContext; import org.eclipse.gyrex.http.internal.HttpActivator; import org.eclipse.gyrex.http.internal.application.manager.ApplicationManager; import org.eclipse.gyrex.http.internal.application.manager.ApplicationProviderRegistration; import org.eclipse.gyrex.http.internal.application.manager.ApplicationRegistration; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.Viewer; import org.osgi.service.prefs.BackingStoreException; import org.apache.commons.lang.StringUtils; public final class ApplicationBrowserContentProvider implements ITreeContentProvider { /** serialVersionUID */ private static final long serialVersionUID = 1L; private static final Object[] EMPTY_ARRAY = new Object[0]; @Override public void dispose() { // empty } @Override public Object[] getChildren(final Object parentElement) { if (parentElement instanceof ApplicationGroup) return ((ApplicationGroup) parentElement).getChildren().toArray(); return EMPTY_ARRAY; } @Override public Object[] getElements(final Object inputElement) { if (inputElement instanceof ApplicationManager) { final ApplicationManager appManager = (ApplicationManager) inputElement; final Map<Object, Object> treeItems = new HashMap<Object, Object>(); try { final Collection<String> registeredApplications = new TreeSet<String>(appManager.getRegisteredApplications()); for (final String appId : registeredApplications) { final ApplicationRegistration applicationRegistration = appManager.getApplicationRegistration(appId); final IRuntimeContext groupObject = applicationRegistration.getContext(); ApplicationGroup treeGroup = (ApplicationGroup) treeItems.get(groupObject); if (treeGroup == null) { treeGroup = new ApplicationGroup(groupObject, inputElement); treeItems.put(treeGroup.getValue(), treeGroup); } final IEclipsePreferences urlsNode = ApplicationManager.getUrlsNode(); final Set<String> mounts = new TreeSet<String>(); try { final String[] urls = urlsNode.keys(); for (final String url : urls) { if (appId.equals(urlsNode.get(url, StringUtils.EMPTY))) { mounts.add(url); } } } catch (final BackingStoreException e) { mounts.add(e.getMessage()); } final ApplicationProviderRegistration applicationProviderRegistration = HttpActivator.getInstance().getProviderRegistry().getRegisteredProviders().get(applicationRegistration.getProviderId()); final ApplicationItem item = new ApplicationItem(applicationRegistration, applicationProviderRegistration, appManager.isActive(appId), mounts); treeGroup.addChild(item); } } catch (final BackingStoreException e) { e.printStackTrace(); } return treeItems.values().toArray(); } return EMPTY_ARRAY; } @Override public Object getParent(final Object element) { if (element instanceof ApplicationItem) return ((ApplicationItem) element).getParent(); if (element instanceof ApplicationGroup) return ((ApplicationItem) element).getParent(); return null; } @Override public boolean hasChildren(final Object element) { if (element instanceof ApplicationGroup) return true; return false; } @Override public void inputChanged(final Viewer viewer, final Object oldInput, final Object newInput) { // empty } }