blob: dbc80d9740d5a6ec7d02edca5ff530a33200fe45 [file] [log] [blame]
/**
* Copyright (c) 2011, 2014 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
* 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:
* Florian Pirchner - Initial implementation
*/
package org.eclipse.osbp.vaaclipse.addons.ecview;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.osbp.runtime.common.validation.Status;
import org.eclipse.osbp.vaaclipse.addons.common.api.explorer.AbstractExplorerInfo;
import org.eclipse.osbp.vaaclipse.addons.common.api.explorer.IExplorerCategory;
import org.eclipse.osbp.vaaclipse.addons.common.api.explorer.IExplorerInfo;
import org.eclipse.osbp.vaaclipse.addons.common.api.explorer.IExplorerInfoManager;
import org.eclipse.osbp.vaaclipse.addons.common.api.status.IStatusManager;
import org.osgi.framework.FrameworkUtil;
import org.osgi.util.tracker.ServiceTracker;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* The Class ExplorerCategory.
*/
public class ExplorerCategory extends AbstractExplorerInfo implements
IExplorerCategory {
/** The Constant LOGGER. */
private static final Logger LOGGER = LoggerFactory
.getLogger(ExplorerCategory.class);
/** The eclipse context. */
private final IEclipseContext eclipseContext;
/** The parent category. */
protected IExplorerCategory parentCategory;
/** The children. */
protected List<IExplorerInfo> children;
/** The lazy has children. */
protected boolean lazyHasChildren;
/**
* Instantiates a new explorer category.
*
* @param eclipseContext
* the eclipse context
*/
public ExplorerCategory(IEclipseContext eclipseContext) {
this.eclipseContext = eclipseContext;
}
/* (non-Javadoc)
* @see org.eclipse.osbp.vaaclipse.addons.common.api.explorer.IExplorerCategory#getParentCategory()
*/
@Override
public IExplorerCategory getParentCategory() {
return parentCategory;
}
/* (non-Javadoc)
* @see org.eclipse.osbp.vaaclipse.addons.common.api.explorer.IExplorerCategory#getChildren()
*/
@Override
public List<IExplorerInfo> getChildren() {
if (children == null) {
loadChilds();
}
return children != null ? Collections.unmodifiableList(children)
: Collections.<IExplorerInfo> emptyList();
}
/**
* Adds the child.
*
* @param info
* the info
* @return true, if successful
*/
private boolean addChild(IExplorerInfo info) {
return children.add(info);
}
/**
* Returns the infos as an input for the tree.
*/
private void loadChilds() {
if (children == null) {
children = new ArrayList<IExplorerInfo>();
} else {
return;
}
ServiceTracker<IExplorerInfoManager, IExplorerInfoManager> tracker = new ServiceTracker<IExplorerInfoManager, IExplorerInfoManager>(
FrameworkUtil.getBundle(getClass()).getBundleContext(),
IExplorerInfoManager.class, null);
try {
tracker.open();
IExplorerInfoManager provider = tracker.waitForService(500);
for (IExplorerInfo info : provider.getExplorerInfo(this,
eclipseContext)) {
addChild(info);
}
} catch (InterruptedException e) {
LOGGER.error("{}", e);
eclipseContext.get(IStatusManager.class).getActiveScope()
.addStatus(Status.createErrorStatus(e));
} finally {
tracker.close();
}
}
}