blob: 533637e59df76d0d435c68103f34179f92147389 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 BSI Business Systems Integration AG.
* 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:
* BSI Business Systems Integration AG - initial API and implementation
******************************************************************************/
package org.eclipse.scout.sdk.ui.internal.view.outline.pages.project;
import java.lang.reflect.Constructor;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.scout.commons.CompareUtility;
import org.eclipse.scout.sdk.ui.extensions.bundle.ScoutBundleExtensionPoint;
import org.eclipse.scout.sdk.ui.extensions.bundle.ScoutBundleUiExtension;
import org.eclipse.scout.sdk.ui.internal.ScoutSdkUi;
import org.eclipse.scout.sdk.ui.internal.view.outline.ScoutExplorerSettingsSupport;
import org.eclipse.scout.sdk.ui.view.outline.pages.IPage;
import org.eclipse.scout.sdk.workspace.IScoutBundle;
/**
* <h3>{@link ScoutBundleNode}</h3>
*
* @author Matthias Villiger
* @since 3.9.0 12.02.2013
*/
public class ScoutBundleNode {
private final String m_symbolicName;
private final Set<ScoutBundleNode> m_childNodes;
private final ScoutBundleUiExtension m_uiExtension;
private final IScoutBundle m_scoutBundle;
public ScoutBundleNode(IScoutBundle bundle, ScoutBundleUiExtension uiExtension) {
m_scoutBundle = bundle;
m_symbolicName = bundle.getSymbolicName();
m_childNodes = new HashSet<ScoutBundleNode>();
m_uiExtension = uiExtension;
if (!ScoutExplorerSettingsSupport.BundlePresentation.FLAT.equals(ScoutExplorerSettingsSupport.get().getBundlePresentation())) {
for (IScoutBundle child : bundle.getDirectChildBundles()) {
if (ScoutExplorerSettingsBundleFilter.get().accept(child)) {
ScoutBundleUiExtension childExt = ScoutBundleExtensionPoint.getExtension(child);
if (childExt != null) {
m_childNodes.add(new ScoutBundleNode(child, childExt));
}
}
}
}
}
public String getSymbolicName() {
return m_symbolicName;
}
public void removeChildBundle(ScoutBundleNode node) {
m_childNodes.remove(node);
}
public Set<ScoutBundleNode> getChildBundles() {
return m_childNodes;
}
public boolean containsBundle(ScoutBundleNode node) {
for (ScoutBundleNode child : getChildBundles()) {
if (node.equals(child)) {
return true;
}
if (child.containsBundle(node)) {
return true;
}
}
return false;
}
public IPage createBundlePage(IPage parentPage) {
Class<? extends IPage> bundleNodePageClass = getUiExtension().getBundlePageClass();
if (bundleNodePageClass != null) {
try {
Constructor<? extends IPage> constructor = bundleNodePageClass.getConstructor(IPage.class, ScoutBundleNode.class);
return constructor.newInstance(parentPage, this);
}
catch (Exception e) {
ScoutSdkUi.logError("Unable to create scout bundle table page.", e);
}
}
return null;
}
@Override
public String toString() {
return getSymbolicName();
}
@Override
public int hashCode() {
return m_symbolicName.hashCode();
}
@Override
public boolean equals(Object obj) {
if (obj instanceof ScoutBundleNode) {
return CompareUtility.equals(((ScoutBundleNode) obj).m_symbolicName, m_symbolicName);
}
else {
return false;
}
}
public ScoutBundleUiExtension getUiExtension() {
return m_uiExtension;
}
public IScoutBundle getScoutBundle() {
return m_scoutBundle;
}
}